面试题29. 顺时针打印矩阵(Java)(二维数组遍历,思维)

1 题目

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

示例 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]

限制:

0 <= matrix.length <= 100
0 <= matrix[i].length <= 100
注意:本题与主站 54 题相同:https://leetcode-cn.com/problems/spiral-matrix/

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

2 Java

2.1 方法一(二维数组遍历,思维)

class Solution {
    public int[] spiralOrder(int[][] matrix) {
        if(matrix.length == 0 || matrix[0].length == 0) return new int[0];

        int[] arr = new int[matrix.length * matrix[0].length];
        int u = 0, d = matrix.length - 1, l = 0, r = matrix[0].length - 1;

        // 一个while遍历一个圈,不断缩小直至结束
        int index = 0;
        while(u <= d && l <= r){
            // 向右
            for(int j = l; j <= r; j++)  arr[index++] = matrix[u][j];
            if(index == arr.length) break;
            u++;
            // 向下
            for(int i = u; i <= d; i++)  arr[index++] = matrix[i][r];
            if(index == arr.length) break;
            r--;
            // 向左
            for(int j = r; j >= l; j--)  arr[index++] = matrix[d][j];
            if(index == arr.length) break;
            d--;
            // 向上
            for(int i = d; i >= u; i--) arr[index++] = matrix[i][l];
            if(index == arr.length) break;
            l++;
        }

        return arr;
    }
}
发布了131 篇原创文章 · 获赞 0 · 访问量 2280

猜你喜欢

转载自blog.csdn.net/weixin_43969686/article/details/105093168