記事ディレクトリ
トピック
方法 1: 2 次元配列内の円を縮小して数値を埋める
4 つの境界条件を定義します。ターンをするたびに値を入力し、条件が満たされなくなるまで 1 ターンずつ縮小します。ループ終了条件は次のとおりです
。
両端の条件は許容されますが、境界の範囲を毎回繰り返して割り当てることはできないことに注意してください。
while(right >= left && bom >= top){
//结束转圈条件(边界不满足)
//while(count <= n * n){//结束转圈条件(填写数值到最大了 无需填了)
class Solution {
//方法一 : 定义四个边界条件,每转一圈,就缩小一圈,直到不满足条件位置
public static int[][] generateMatrix(int n) {
int[][] res = new int[n][n];
int left = 0;
int right = n-1;
int top = 0;
int bom = n-1;
int count = 1;//计数器
while(right >= left && bom >= top){
//结束转圈条件
//while(count <= n * n){//结束转圈条件 两种结束条件都可以
//上左闭右闭
for(int i = left;i<=right ; i++){
res[top][i] = count;
count++;
}
//右 上开下闭
for(int i = top+1;i<=bom ; i++){
res[i][right] = count;
count++;
}
//下 左闭右开
for(int i = right-1;i>=left ; i--){
res[bom][i] = count;
count++;
}
//左 下开上开
for(int i = bom-1;i>top ; i--){
res[i][left] = count;
count++;
}
//缩小一圈 修改四个边界
left++;
right--;
top++;
bom--;
}
return res;
}
}