59. 螺旋矩阵 II
给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n = 1
输出:[[1]]
提示:
1 <= n <= 20
var generateMatrix = function(n) {
let a = new Array(n);
for(let l=0;l<a.length;l++) {
a[l]=new Array(n);
}
let k=1;
let i=0,j=0;
let zuobianjie=0,youbianjie=n-1,shangbianjie=0,xiabianjie=n-1;
while(zuobianjie<=youbianjie&&shangbianjie<=xiabianjie) {
while(j>=zuobianjie&&j<=youbianjie) {
a[i][j++]=k++;
}
j--;
i++;
youbianjie--;
while(i>=shangbianjie&&i<=xiabianjie) {
a[i++][j]=k++;
}
i--;
j--;
xiabianjie--;
while(j>=zuobianjie&&j<=youbianjie) {
a[i][j--]=k++;
}
j++;
i--;
zuobianjie++;
shangbianjie++;
while(i>=shangbianjie&&i<=xiabianjie) {
a[i--][j]=k++;
}
i++;
j++;
}
return a;
};
一开始不知道js中怎么创建二维数组hhh
- 1.利用Array()构造函数方法
let m = 3, n = 4;
let arr = new Array(m);
for (let i = 0; i < arr.length; i++) {
arr[i] = new Array(n);
}
console.log(arr);//output:[[empty × 4],[empty × 4],[empty × 4]]
- 2.利用Array.prototype.map()方法
map() 方法创建一个新数组,这个新数组由原数组中的每个元素都调用一次提供的函数后的返回值组成。并且它不会改变原来的数组。
let m = 3,n = 4;
let arr = new Array(m).fill().map(() => new Array(n));
console.log(arr); //output:[[empty × 4],[empty × 4],[empty × 4]]
54. 螺旋矩阵
给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。
示例 1:
输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[1,2,3,6,9,8,7,4,5]
示例 2:
输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
输出:[1,2,3,4,8,12,11,10,9,5,6,7]
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 10
-100 <= matrix[i][j] <= 100
直接用上一个代码改的。
var spiralOrder = function(matrix) {
let a=new Array();
let k=0;
let i=0,j=0;
let zuobianjie=0,youbianjie=matrix[0].length-1,shangbianjie=0,xiabianjie=matrix.length-1;
while(zuobianjie<=youbianjie&&shangbianjie<=xiabianjie) {
while(j>=zuobianjie&&j<=youbianjie) {
a[k++]=matrix[i][j++];
}
j--;
i++;
youbianjie--;
while(i>=shangbianjie&&i<=xiabianjie) {
a[k++]=matrix[i++][j];
}
i--;
j--;
xiabianjie--;
while(j>=zuobianjie&&j<=youbianjie) {
a[k++]=matrix[i][j--];
}
j++;
i--;
zuobianjie++;
shangbianjie++;
while(i>=shangbianjie&&i<=xiabianjie) {
a[k++]=matrix[i--][j];
}
i++;
j++;
}
return a.splice(0,matrix[0].length*matrix.length);
};