一、题目描述
给你一个正整数 n ,生成一个包含 1 到 n的平方 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
二、思路解答
1.模拟过程
主要考察的是对于代码的掌控能力
1)首先是建立一个空矩阵,将数字填入
初始值是1,终止值是n*n,
数字满足要求时:中间的填入过程就是从左到右,从上到下,从右到左,从下到上。
2)每次 填入数字后,
首先就是数字加1 ,然后就是更新边界。
3)最后返回上边建立并且输入数字的矩阵。
三、代码
1.java模拟
class Solution {
public int[][] generateMatrix(int n) {
int l = 0, r = n - 1, t = 0, b = n - 1;//左,右,上,下边界
int[][] mat = new int[n][n];//建立一个空矩阵
int num = 1, tar = n * n;//建立初始值和终止值
while(num <= tar){
for(int i = l; i <= r; i++) mat[t][i] = num++; // 从左到右
t++;//更新上边界
for(int i = t; i <= b; i++) mat[i][r] = num++; // 从上到下
r--;//更新右边界
for(int i = r; i >= l; i--) mat[b][i] = num++; // 从右到左
b--;//更新下边界
for(int i = b; i >= t; i--) mat[i][l] = num++; // 从下到上
l++;//更新左边界
}
return mat;//最后返回一个矩阵
}
}
2.java 模拟实现
关于这个代码,和上边的代码是一样的,但是并不能编译成功。
class Solution {
public int[][] generateMatrix(int n) {
int i=0;//很奇怪,一模一样的代码就是这个代码运行成功必须要加这个初始值。
//定义四个边界
int l=0,r=n-1,t=0,b=n-1;
//定义一个空矩阵
int[][] mat=new int[n][n] ;
//定义初始值和结束值
int num=1,tar=n*n;
//填写数字,进入循环的条件
while(num<=tar){
for(i=l;i<=r;i++) mat[t][i]=num++;//从左到右
t++;//更新上边界
for(i=t;i<=b;i++) mat[i][r]=num++;//从上到下
r--;//更新右边界
for(i=r;i>=l;i--) mat[b][i]=num++;//从右到左
b--;//更新下边界
for(i=b;i>=t;i--) mat[i][l]=num++;//从下到上
l++;//更新左边界
}
return mat;//返回一个最后的矩阵
}
}