【数组四】螺旋矩阵

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);
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值