面接問題29.時計回りにマトリックスを印刷(Java)(2 D配列遍歴、思考)

9060 ワード

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メソッド1(2 D配列遍歴、思考)
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;
    }
}