mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
修改 0059 螺旋矩阵II JavaScript版本 解法
提供一种条理更清晰的方法,与本文介绍的解法更吻合
This commit is contained in:
@ -239,45 +239,54 @@ class Solution:
|
||||
|
||||
javaScript
|
||||
|
||||
```js
|
||||
```javascript
|
||||
|
||||
/**
|
||||
* @param {number} n
|
||||
* @return {number[][]}
|
||||
*/
|
||||
var generateMatrix = function(n) {
|
||||
// new Array(n).fill(new Array(n))
|
||||
// 使用fill --> 填充的是同一个数组地址
|
||||
const res = Array.from({length: n}).map(() => new Array(n));
|
||||
let loop = n >> 1, i = 0, //循环次数
|
||||
count = 1,
|
||||
startX = startY = 0; // 起始位置
|
||||
while(++i <= loop) {
|
||||
// 定义行列
|
||||
let row = startX, column = startY;
|
||||
// [ startY, n - i)
|
||||
while(column < n - i) {
|
||||
res[row][column++] = count++;
|
||||
let startX = startY = 0; // 起始位置
|
||||
let loop = Math.floor(n/2); // 旋转圈数
|
||||
let mid = Math.floor(n/2); // 中间位置
|
||||
let offset = 1; // 控制每一层填充元素个数
|
||||
let count = 1; // 更新填充数字
|
||||
let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
|
||||
|
||||
while (loop--) {
|
||||
let row = startX, col = startY;
|
||||
// 上行从左到右(左闭右开)
|
||||
for (; col < startY + n - offset; col++) {
|
||||
res[row][col] = count++;
|
||||
}
|
||||
// [ startX, n - i)
|
||||
while(row < n - i) {
|
||||
res[row++][column] = count++;
|
||||
// 右列从上到下(左闭右开)
|
||||
for (; row < startX + n - offset; row++) {
|
||||
res[row][col] = count++;
|
||||
}
|
||||
// [n - i , startY)
|
||||
while(column > startY) {
|
||||
res[row][column--] = count++;
|
||||
// 下行从右到左(左闭右开)
|
||||
for (; col > startX; col--) {
|
||||
res[row][col] = count++;
|
||||
}
|
||||
// [n - i , startX)
|
||||
while(row > startX) {
|
||||
res[row--][column] = count++;
|
||||
// 左列做下到上(左闭右开)
|
||||
for (; row > startY; row--) {
|
||||
res[row][col] = count++;
|
||||
}
|
||||
startX = ++startY;
|
||||
|
||||
// 更新起始位置
|
||||
startX++;
|
||||
startY++;
|
||||
|
||||
// 更新offset
|
||||
offset += 2;
|
||||
}
|
||||
if(n & 1) {
|
||||
res[startX][startY] = count;
|
||||
// 如果n为奇数的话,需要单独给矩阵最中间的位置赋值
|
||||
if (n % 2 === 1) {
|
||||
res[mid][mid] = count;
|
||||
}
|
||||
return res;
|
||||
};
|
||||
|
||||
|
||||
```
|
||||
|
||||
Go:
|
||||
|
Reference in New Issue
Block a user