题目描述:给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵。
示例:
输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, 4 ], [ 7, 6, 5 ] ]
思路:定义边界top、right、bottom、left分别表示矩阵的上边界、右边界、下边界和左边界,以向右->向下->向左->向上的顺序生成矩阵,并对边界进行处理。
/**
* @param {number} n
* @return {number[][]}
*/
var generateMatrix = function (n) {
if(n == 0)
return [];
var matrix = [];
for(var i = 0; i < n; i++)
matrix[i] = [];
var top = 0, left = 0, right = n - 1, bottom = n - 1;
var count = 1;
while(top <= bottom && left <= right) {
for(var i = left; i <= right; i++)
matrix[top][i] = count++;
top++;
if(top > bottom)
break;
for(var i = top; i <= bottom; i++)
matrix[i][right] = count++;
right--;
if(right < left)
break;
for(var i = right; i >= left; i--)
matrix[bottom][i] = count++;
bottom--;
if(bottom < top)
break;
for(var i = bottom; i >= top; i--)
matrix[i][left] = count++;
left++;
if(left > right)
break;
}
return matrix;
};