力扣54(java)-螺旋矩阵(中等)

题目:

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。

示例 1:

 

提示:

m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
通过次数251,880提交次数517,676

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/spiral-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

借助四个顶点(left、right、upper、bottom)对未访问的区域进行限制,循环退出的条件就是res.size()== m *n

 代码:

 1 class Solution {
 2     public List<Integer> spiralOrder(int[][] matrix) {
 3         List<Integer> res = new ArrayList<Integer>();
 4         int m = matrix.length,n = matrix[0].length;
 5         int left = 0, right = n -1, upper = 0, bottom = m -1;
 6         while(res.size() < m*n){
 7             //从左往右遍历
 8             if(upper <= bottom){
 9                 for(int col = left; col <= right; col++){
10                     res.add(matrix[upper][col]);
11                 }
12                 upper++;
13             }
14             //从上往下遍历
15             if(left <= right){
16                 for(int row = upper; row <= bottom; row++){
17                     res.add(matrix[row][right]);
18                 }
19                 right--;
20             }
21             //从右往左遍历
22             if(upper <= bottom){
23                 for(int col = right; col >= left; col--){
24                     res.add(matrix[bottom][col]);
25                 }
26                 bottom--;
27             }
28             //从下往上
29             if(left <= right){
30                 for(int row = bottom; row >= upper; row--){
31                     res.add(matrix[row][left]);
32                 }
33                 left++;
34             }
35         }
36     return res;
37     }
38 }

 小知识:

1.计算字符串的长度

int len= str.length();

2.计算数组的长度

int length = nums.length;

3.size()是针对泛型集合List,相比于数组,数组是静态的在初始化的时候JVM就会为其分配相应的内存大小,但是List是动态的,其没有length属性,所以java专门为其提供了size()方法来计算集合的长度大小。

List<Integer> res = new ArrayList<Integer>();
int n = res.size();

 

posted on 2022-04-20 15:01  我不想一直当菜鸟  阅读(210)  评论(0编辑  收藏  举报