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;
}
}