文章目录
- 题目
- 方法一:二维数组缩圈填数字
- 方法二:
题目
方法一:二维数组缩圈填数字
定义四个边界条件,每转一圈,把数值填进去,然后缩小一圈,直到不满足条件位置
结束循环条件可以是:
两种结束条件都可以,但是一定要注意每次处理一条边界的范围 不能重复赋值
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;
}
}