leetcode每天5题-Day26

1.螺旋矩阵 II

59. 螺旋矩阵 II-中等

b站视频讲解-代码随想录
重点:循环不变量,对每条边的处理规则要统一,比如都按照左闭右开原则处理。
①模拟(版本一)

var generateMatrix = function(n) {
    const ans=new Array(n).fill(0).map(()=>new Array(n).fill(0));
    var start=1,l=0,r=n-1,t=0,b=n-1;
    while(start<=n*n){
    for(let i=l;i<=r;i++){
        ans[t][i]=start++;
    }
    for(let j=t+1;j<=b;j++){
        ans[j][r]=start++;
    }
    for(let k=r-1;k>l;k--){
        ans[b][k]=start++;
    }
    for(let m=b;m>t;m--){
        ans[m][l]=start++;
    }
    [l,r,t,b]=[l+1,r-1,t+1,b-1]
    }
    return ans;
};

②模拟(代码随想录版)

var generateMatrix = function(n) {
    let startX=0,startY=0; // 起始位置
    let loop=Math.floor(n/2);  // 控制循环圈数
    let mid=Math.floor(n/2);  // n为奇数时最中间的位置
    let offset=1; //控制填充圈逐渐变小
    let count=1; // 填充的数字

    const ans=new Array(n).fill(0).map(()=>new Array(n).fill(0));

    while(loop--){
        let row=startX,col=startY;
        // 上行,改变的是列值
        for(;col<n-offset;col++){
            ans[row][col]=count++;
        }
        for(;row<n-offset;row++){
            ans[row][col]=count++;
        }
        for(;col>startY;col--){
            ans[row][col]=count++;
        }
        for(;row>startX;row--){
            ans[row][col]=count++;
        }

        // 每填充一圈,就更新起始位置
        startX++;
        startY++;

        offset++;

        }

        if(n%2===1){
            ans[mid][mid]=count;
        }
        
    return ans;
};

2.螺旋矩阵

54. 螺旋矩阵-中等

var spiralOrder = function(matrix) {

    const m=matrix.length,n=matrix[0].length;
    const ans=[];

    let t=0,l=0,r=n-1,b=m-1;
    while(l<=r&&t<=b){
        for(let i=l;i<=r;i++){
            ans.push(matrix[t][i]);
        }
        for(let j=t+1;j<=b;j++){
            ans.push(matrix[j][r]);
        }
       if(l<r&&t<b){
            for(let i=r-1;i>=l+1;i--){
                ans.push(matrix[b][i]);
            }
            for(let j=b;j>=t+1;j--){
                ans.push(matrix[j][l]);
            }
       }
        [t,l,r,b]=[t+1,l+1,r-1,b-1];
    }
    return ans;
};

3.顺时针打印矩阵

剑指 Offer 29. 顺时针打印矩阵-简单
54. 螺旋矩阵
注意,该题中的const m=matrix.length,n=matrix[0].length; m与n的范围可取到0
加上👇

if(matrix.length==0||matrix[0].length==0) return [];

总结数组👇
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值