天天看點

數組[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++;
	     }
}