给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
提示:
1 <= n <= 20
示例:
输入: n = 3
输出: [[1,2,3],[8,9,4],[7,6,5]]
题解:
/**
* @description: 模拟法 TC:O(n^2) SC:O(n^2)
* @author: JunLiangWang
* @param {*} n 给定整数数
* @return {*}
*/
function simulation(n){
/**
* 该题与螺旋矩阵I相同,同样可以利用模拟法的方式,
* 利用循环遍历模拟矩阵顺时针螺旋顺序输出元素
*/
// 定义方向,0:向右,1:向下,2:向左,3:向上
let dir = 0,
// 当前元素所在行
row = 0,
// 当前元素所在列,从-1开始为了方便出来开始+1的情况
col = -1,
// 已经遍历了多少圈,每遍历一圈,row/col的最大值则会
// 减一
spinCount = 0,
// 定义矩阵
matrix=new Array(n).fill(0).map(()=>new Array(n));
// 遍历矩阵所有元素
for(let i=1;i<=n*n;i++){
// 选择方向
switch (dir) {
// 向右
case 0:
col++;
// 当达到右边界,方向变为向下
if (col === n - spinCount - 1) dir++;
break;
// 向下
case 1:
row++;
// 当达到下边界,方向变为向左
if (row === n - spinCount - 1) dir++;
break;
// 向左
case 2:
col--;
// 当达到左边界,方向变为向上
if (col === spinCount) dir++;
break;
// 向上
case 3:
row--;
// 当达到上边界,方向变为向右,并且
// 圈数+1
if (row === spinCount + 1) {
dir = 0;
spinCount++;
}
break;
}
// 将当前元素添加到输出数组
matrix[row][col]=i
}
// 输出
return matrix;
}
来源:力扣(LeetCode)