leetcode 59. Spiral Matrix II
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 ]
]
思路:
跟之前的Spiral Matrix没啥区别,就是一个逆运算这道题是要按螺旋的顺序来填数,由于给定矩形是个正方形,我们计算环数时用n / 2来计算,若n为奇数时,此时最中间的那个点没有被算在环数里,所以最后需要单独赋值,还是下标转换问题是难点。
var generateMatrix = function(n) {
var res=[];
var c=Math.floor(n/2);
var p=n;
var val=1;
for(var i=0;i<n;i++){
res.push([]);
}
for(var i=0;i<c;i++,p-=2){
for(var col=i;i<i+p;++col){
res[i][col]=val++;
}
for(var row=i+1;row<i+p;row++){
res[row][i+p-1]=val++;
}
for(var col=i+p-2;col>=i;col--){
res[i+p-1][col]=val++;
}
for(var row=i+p-2;row>i;--row){
res[row][i]=val++;
}
}
if( n%2!=0 ) res[c][c]=val;
return res;
};