力扣之螺旋矩阵

给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]

分析:本题力扣所给标签是中等题,但是其实本题除了几个需要注意的点外,整体难度也就是简单题。现在我们来分析一下,他给你一个m行n列的矩阵,那么最普通的情况就是m>1,n>1这种的矩阵,比较极限的情况就是m=1或者n=1的行矩阵和列矩阵,那么这三种情况就是我们本题所注意注意处理的情况了。

1、我们声明四个指针,分别代表顶部行号,底部行号,左侧列号与右侧列号,用着四个指针来指示我们遍历的边界。
2、我们先从最顶部开始从左到右遍历,然后按照顺时针顺序遍历
3、当我们开始往下遍历时,此时就会遇到两种情况了,即m>1或者m=1,如果m=1那我们就不用遍历了,所以我们应该写一个遍历判断,如果>1,那么进入判断。
4、同理当我们从右向左,从下向上遍历时,也要判断条件。如果m = 1,n = 1,那么就不用从右往左遍历了啊。

由此·便可以写出代码如下:

class Solution {
    public List<Integer> spiralOrder(int[][] matrix) {
        
        List<Integer> list = new ArrayList<>();
        int top = 0;
        int bottom = matrix.length - 1;
        int left = 0;
        int right = matrix[0].length - 1;

        while(top <= bottom && left <= right){

            for(int i = left; i <= right; i++){
                list.add(matrix[top][i]);
            }
            
            if(top < bottom){
                for(int i = top+1; i <= bottom; i++){
                    list.add(matrix[i][right]);
                }
            }
            
            if(top < bottom && left < right){
                for(int i = right-1; i >= left; i--){
                    list.add(matrix[bottom][i]);
                }
            }

            if(top < bottom && left < right){
                for(int i = bottom-1; i > top; i--){
                    list.add(matrix[i][left]);
                }
            }

            top++;
            bottom--;
            left++;
            right--;
            
        }

        return list;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值