Given an integer n, generate a square matrix filled with elements from 1 to n2 in spiral order.
For example,
Given n = 3,
You should return the following matrix:
[
[ 1, 2, 3 ],
[ 8, 9, 4 ],
[ 7, 6, 5 ]
]
继承上一道题目的思路:
使用while true 循环,在里面给四个边界进行判断
代码:
int[][]result = new int[n][n];
if(n==0)
return result;
int count =1;
int top=0;int button=n-1;int right=n-1;int left=0;
while(true){
if(top>button||left>right)
break;
for(int i=left;i<=right;i++,count++){
result[top][i]=count;
}
top++;
if(top>button||left>right)
break;
for(int i=top;i<=button;i++,count++)
result[i][right]=count;
right--;
for(int i=right;i>=left;i--,count++)
result[button][i]=count;
button--;
if(top>button||left>right)
break;
for(inti =button;i>=top;i--,count++)
result[i][left]=count;
left++;
}
return result;
改进思路:其实内部并不需要进行边界判断,因为n确定之后,循环的次数肯定是n*n次,所以只需要
while(count<=n*n)即可。