LeetCode剑指Offer 29.顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。

示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]

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

示例 2:

输入:matrix = [[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 {
//    获取行数array.length;
//    获取列数:array[0].length;
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length == 0) return new int[0];
        // 左闭右开原则;
        int left=0;                     //左
        int right=matrix[0].length-1;   //右---列[]
        int top=0;                      //顶
        int bottom=matrix.length-1;     //底 ----行
        int x=0;
        int[] res = new int[((right+1)*(bottom+1))];//定义一个数组存储
        while (true) {
            for (int i =left; i <=right; i++) {      //左到右
                res[x++]=matrix[top][i];
            }

            //之后开始上到下,需要先判断;
            //更新边界值(top+1), 判断更新后的边界值是否交叉: 等于不算交叉
            if(++top>bottom) break;        // 上一个 for 左到右遍历后 top就往下移;
            for (int i = top; i <= bottom; i++) {       //上到下遍历
                res[x++]=matrix[i][right];
            }

            if (left>--right) break;                    // 列遍历后 right就往左移;
            for (int i = right; i>=left ; i--) {         //右到左
                res[x++]=matrix[bottom][i];
            }

            if (--bottom<top) break;            // 上一个for右到左遍历后 bottom就往上移;
            for (int i =bottom; i >=top; i--) {          //下到上
                res[x++]=matrix[i][left];
            }

            if (right<++left) break;            // 遍历后 left就往右移;
        }
        return res ;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值