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