给定一个正整数n,生成一个包含 1 到n2所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入:3
输出:[ [ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]]
这题还是有点绕的,最开始做主要容易忽略中间的[1][1] = 9 的赋值,思路:
1:把一次→↓←↑的赋值看作一次循环,在值i<=n*n为真时,不断重复这个循环。
2:在一次循环内,当完成←→赋值的时候,↑↓赋值的最大值减去1。↑↓同理。
public class Solution {
public int[,] GenerateMatrix(int n) {
int[,] arr = new int[n,n];
int num = 1;//赋值的值
int col = n;//循环赋值时的纵向次数
int row = n;//循环赋值时的横向次数
int x = 0;//标记数组纵向
int y = -1;//标记数组横向
while (num <=n * n)
{
for (int i = 0; i < row; i++)
{
arr[x,y=y+1] = num;
num++;
}
col--;
for (int i = 0; i < col; i++)
{
arr[x = x + 1, y] = num;
num++;
}
row--;
for (int i = 0; i < row; i++)
{
arr[x, y = y - 1] = num;
num++;
}
col--;
for (int i = 0; i < col; i++)
{
arr[x = x - 1, y] = num;
num++;
}
row--;
}
return arr;
}
}
网友评论