题目:给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
思路:保持一个原则,遵循左闭右开原则,实现数值的模拟加一。
<script>
/* 给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 */
var generateMatrix = function(n) {
var str = new Array(n).fill(0).map(() => new Array(n).fill(0)); //定义一个二维数组,来保存结果
var startX = 0;
var startY = 0; //定义起始位置
var count = 1; //定义一个变量用来每次加1(更新值),螺旋矩阵自身不断加以就能达到n^2
var mid = Math.floor(n / 2); //计算中间值,向下取整,当n为奇数时,单独计算中间值
var loop = Math.floor(n / 2); //计算循环次数,有几圈
var offset = 1; //用来限制每次每条边的长度,即每一条边的填充个数?
while (loop--) { //这个循环里面是针对偶数圈,是刚刚好的,loop对2取整了嘛
var i = startX;
var j = startY;
//第一条边,从左往右(左闭右开)
for (j = startY; j < startY + n - offset; j++) {
str[i][j] = count++;
};