LeetCode 54 螺旋矩阵(java实现)

LeetCode 54 螺旋矩阵

给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:

[
 [ 1, 2, 3 ],
 [ 4, 5, 6 ],
 [ 7, 8, 9 ]
]

输出:

[1,2,3,6,9,8,7,4,5]

示例 2:

输入:

[
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9,10,11,12]
]

输出:

[1,2,3,4,8,12,11,10,9,5,6,7]

解题思路:

所谓螺旋遍历,就是顺时针一层一层地从外向内遍历。我们可以按照抽丝剥茧的方法来进行。这里面重要的是代码细节的处理,尤其是边界的处理,很容易产生越界的错误。下面的代码,我会在关键的地方进行注释解释。

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        //定义保存最终结果的集合
         List<Integer> list=new ArrayList<>();
         //处理矩阵边界情况
         if(matrix==null || matrix.length==0) return list;
         //矩阵的行,注意这里行的定义从0开始
         int row=matrix.length-1;
         //矩阵的列,同样也是从0开始
         int column=matrix[0].length-1;
         //r是记录在进行螺旋遍历的过程中所遍历的行
         int r=0;
         //c是记录在进行螺旋遍历的过程中所遍历的列
         int c=0;
         //定义大的循环体
         while(r<=row && c<=column){
         //首先遍历的是最上面的一行
             for(int i=c;i<=column;i++){
                 list.add(matrix[r][i]);
             }
             //遍历最右边的一列
             for(int j=r+1;j<=row;j++){
                  list.add(matrix[j][column]);
             }
             //遍历最下面和最左边的一列
             if(r<row && c<column){
              //k>=c很关键,因为我们遍历的过程中,
               //c的值记录的是当前遍历到的列,会随着遍历的增加而递增
                 for(int k=column-1;k>=c;k--){
                    list.add(matrix[row][k]);
                 }
                 //最左边的一列
                 for(int m=row-1;m>r;m--){  //m>r的原因上同
                      list.add(matrix[m][c]);
                 }
             }
             r++;
             row--;
             c++;
             column--;
         }
         return list;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值