天天看点

数组[59.螺旋矩阵II]

题目:

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。

示例 1:

数组[59.螺旋矩阵II]
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
           

示例 2:

输入:n = 1
输出:[[1]]
           

思路与代码

var generateMartix = function(n){
	const res = Array.from({length:n}).map(()=>new Array(n));
	let startx = 0,starty = 0,  //定义每循环一个圈的起始位置
	     loop = n>>1 , //每个圈循环几次,例如n为奇数3,那么loop = 1只是循环一圈,矩阵中间的值需要单独处理
	     count = 1,  //用来给矩阵每个空格赋值
	     offset = 1;  //每一圈循环,需要控制每一条边遍历的长度
	     while(loop--){
	     	//定义行列
	     	let row = startx,column = starty;
	     	//模拟上侧从左到右
	     	while(column<n-offset){
	     		res[row][column++] = count++;
	     	}
	     	//模拟右侧从上到下
	     	while(row<n-offset){
	     		res[row++][column] = count++;
	     	}
	     	//模拟下侧从右到左
	     	while(coulmn>startx){
	     		res[row][column--] = count++;
	     	}
	     	//模拟左侧从下到上
	     	while(row>starty){
	     		res[row--][column] = count++;
	     	}
	     	startx++;
	     	starty++;
	     	offset++;
	     }
}