59スパイラルマトリックスII(アナログ)

1.問題の説明:

正の整数nを指定して、1からn2までのすべての要素を含む正方行列を生成します。要素は時計回りにらせん状に配置されます。

例:

入力:3
出力:
[
 [1、2、3]、
 [8、9、4]、
 [7、6、5]
]

出典:LeetCode
リンク:https ://leetcode-cn.com/problems/spiral-matrix-ii

2.思考分析:

①実は比較的わかりやすいトピックです。いつもの考え方で配列要素全体の生成過程をシミュレーションできます。最初は右に生成されたもの、2番目は下の要素を生成するもの、3番目は左側の要素を生成し、4番目は要素を上向きに生成するため、4つのwhileループを使用してボックスに対応するエッジを生成できます。現在の配列要素を生成できる条件は、現在の要素がゼロであることであり、前の要素がないことを示しています。これは塗りつぶされており、現在の位置が配列の境界を超えていないため、4つのwhileループの条件は、現在の位置が配列の境界を超えておらず、現在の配列要素がゼロであるということです。ボックスを埋めた後、2番目の塗りつぶしについても同様です。最外層はwhileループで設定でき、要素数が発生していない場合は最外ループを実行でき、ループが終了するとすべての要素が生成されます。

②全体の流れが比較的わかりやすく、境界や対応条件の判定が完了し、全体のコードも難しくない、カラーボタンにも独自のソリューションを書いた

3.コードは次のとおりです

import java.util.Scanner;
public class Solution {
    public int[][] generateMatrix(int n) {
        if (n == 0) return null;
        int arr[][] = new int[n][n];
        int count = 2;
        int x = 0, y = 0;
        arr[0][0] = 1;
        while (count <= n * n){
            while (y + 1 < n && arr[x][y + 1] == 0){
                arr[x][y + 1] = count++;
                ++y;
            }
            while (x + 1 < n && arr[x + 1][y] == 0){
                arr[x + 1][y] = count++;
                ++x;
            }
            while (y - 1 >= 0 && arr[x][y - 1] == 0){
                arr[x][y - 1] = count++;
                --y;
            }
            while (x - 1 >= 0 && arr[x - 1][y] == 0){
                arr[x - 1][y] = count++;
                --x;
            }
        }
        return arr;
    }
}

 

元の記事569件を公開 153のような 訪問数590,000+

おすすめ

転載: blog.csdn.net/qq_39445165/article/details/105313837