54 螺旋矩阵

解题思路,每一层都是这个顺序(红绿蓝紫)
在这里插入图片描述

class Solution {
    public List < Integer > spiralOrder(int[][] matrix) {
        List ans = new ArrayList();   //存储结果
        if (matrix.length == 0) return ans;
 
        int r1 = 0, 
            r2 = matrix.length - 1;     //行数
        int c1 = 0, 
            c2 = matrix[0].length - 1;  //列数
 
        while (r1 <= r2 && c1 <= c2) {
            for (int c = c1; c <= c2; c++) {
                ans.add(matrix[r1][c]);      //将上面的行,向右,加入
            }
            for (int r = r1 + 1; r <= r2; r++) {
                ans.add(matrix[r][c2]);     //将右边的列,向下,加入
            }
            
            if (r1 < r2 && c1 < c2) {
                for (int c = c2 - 1; c > c1; c--) ans.add(matrix[r2][c]); //将下面的行,向左顺序,加入
                for (int r = r2; r > r1; r--) ans.add(matrix[r][c1]);     //将左边的列,向行顺序,加入
            }
            //进入第次内层
            r1++;
            r2--;
            c1++;
            c2--;
        }
        return ans;
    }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值