スパイラルマトリックス (2) ソリューション

スパイラルマトリックス (2)

ここに画像の説明を挿入

分析:

レイヤーごとのシミュレーション
マトリックスはいくつかのレイヤーと見なすことができます。最初にマトリックスの最も外側の要素を埋め、次にマトリックスの 2 番目の外側の要素を埋め、マトリックスの最も内側の要素が満たされるまで続けます。
ここに画像の説明を挿入
レイヤーごとに、左上から時計回りにすべての要素を埋めていきます。
現在のレイヤーの左上隅が (上、左) であり、右下隅が (下、右) であると仮定すると、現在のレイヤーの要素を次の順序で塗りつぶします。

  1. 上部の要素を左から右へ、(上、左) から (上、右) の順序で埋めます。
  2. 右側の要素を上から下に、(上 + 1、右) から (下、右) に入力します。
  3. 下の要素を右から左に、(下、右 - 1) から (下、左) に入力します。
  4. 左側の要素を下から上に (下 - 1、左) から (上 + 1、左) に入力します。

現在のレイヤーのすべての要素を塗りつぶした後、左と上をそれぞれ 1 増やし、右と下をそれぞれ 1 減らし、次のレイヤーに入り、すべての要素が塗りつぶされるまで要素を塗りつぶし続けます。

コード

class Solution {
    
    
    public int[][] generateMatrix(int n) {
    
    
        int num = 1;
        int[][] matrix = new int[n][n];
        int top = 0, right = n - 1, bottom = n - 1, left = 0;
        while(left <= right && top <= bottom) {
    
    
            for(int col = top; col <= right; col++) {
    
    
                matrix[top][col] = num;
                num++;
            }
            for(int row = top + 1; row <= bottom; row++) {
    
    
                matrix[row][right] = num;
                num++;
            }
            for(int col = right - 1; col >= top; col--) {
    
    
                matrix[bottom][col] = num;
                num++;
            }
            for(int row = bottom - 1; row > top; row--) {
    
    
                matrix[row][left] = num;
                num++;
            }
            top++;
            right--;
            bottom--;
            left++;
        }
        return matrix;
    }
}

おすすめ

転載: blog.csdn.net/weixin_45832482/article/details/122714522