螺旋矩阵 II
给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3
输出:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
思路+代码+注释:
public class FiveNine {
public static void main(String[] args) {
generateMatrix(3);
}
public static int[][] generateMatrix(int n) {
/*
思路:n代表n阶矩阵,也就是n行n列,按顺时针方向生成矩阵,循环生成上边、右边、下边、左边
*/
//num代表存入的数字
int num=1;
int[][] nums=new int[n][n];
int top=0;
int bottom=n-1;
int left=0;
int right=n-1;
while (true)
{
//生成上边,从左到右
for (int i = left; i <= right; i++) {
nums[top][i]=num;
num++;
}
top++;
if (top>bottom)
{
return nums;
}
//生成右边,从上到下
for (int i = top; i <= bottom; i++) {
nums[i][right]=num;
num++;
}
right--;
if (right<left)
{
return nums;
}
//生成下边,从右到左
for (int i = right; i >= left; i--) {
nums[bottom][i]=num;
num++;
}
bottom--;
if (bottom<top)
{
return nums;
}
//生成左边,从下到上
for (int i = bottom; i >=top ; i--) {
nums[i][left]=num;
num++;
}
left++;
if (left>right)
{
return nums;
}
}
}
}
时间复杂度分析:
嵌套循环的时间复杂度等于内外循环时间复杂度之积,内循环时间复杂度为O(n),外循环执行的次数是n-1时间复杂度为O(n),总的时间复杂度为O(n^2)。
速度排名: