• 矩阵的相关问题(旋转矩阵&螺旋矩阵)


    旋转矩阵(将我们的数组进行旋转90度,180度,270度)

                  rotate(90deg)=>               

     旋转90度之后分析一下:旋转后的数组第一行等于原来数组的第一列。

    代码如下

    const arr = [
        [1,2,3,4],
        [5,6,7,8],
        [9,10,11,12],
        [13,14,15,16],
        [17,18,19,20]
    ]
    
    function rotate(arr) {
        let arr2 = [];
        for(let i =0; i<arr[0].length; i++) { //i是每一列的序号
            let temparr = []; //存储旋转后每一行的结果
            for(let j=0;j<arr.length; j++) { //j是每一行的序号
                temparr.unshift(arr[j][i]); //将结果从头开始一个一个插入
            }
            arr2.push(temparr)
        }
        return arr2;
    }
    
    console.log(rotate(arr)) //旋转90deg
    

     如果旋转180那么rotate函数调用 两遍即可。270deg以此类推

    螺旋矩阵(顺时针遍历矩阵)

     分析:

    1.每一轮的循环都是:向右->向下->向左->向上

    2.使用四个边界l,r,t,b来限定遍历的范围

    3.向左走完一遍之后,上边界下移(t++);向下走完一遍之后,右边界左移(r--);向左走完一遍之后,下边界上移(b--);向上走完一遍之后,左边界右移(l++)

    3.结束条件:当左边界>=右边界&&上边界>=下边界

    代码如下:

    onst arr = 
    [
        [1,2,3,4],
        [5,6,7,8],
        [9,10,11,12],
        [13,14,15,16],
        [17,18,19,20]
    ]
    
    function ergodic(arr) {
        let t = 0;
        let b = arr.length - 1;
        let l = 0;
        let r = arr[0].length - 1;
        while(l<r||t<b) {
            for(let i=l;i<=r;i++) {
                //向右
                console.log(arr[t][i]);
            }
            t++;
            for(let i = t;i<=b;i++) {
                //向下
                console.log(arr[i][r])
            }
            r--;
            for(let i=r;i>=l;i--) {
                //向左
                console.log(arr[b][i]);
            }
            b--;
            for(let i =b;i>=t;i--) {
                //向上
                console.log(arr[i][l])
            }
            l++;
        }
    }
    
    ergodic(arr)
    

      

  • 相关阅读:
    Bugs及解决方案列表
    CSS技巧和经验
    我的越权之道
    密码找回逻辑漏洞总结
    业务安全漏洞挖掘归纳总结【转载】
    User Agent
    影响网站页面打开速度的三个因素
    iframe 透明
    ie对行高line-height的诡异解释
    A标记点击后去掉虚线
  • 原文地址:https://www.cnblogs.com/longlongdan/p/14313205.html
Copyright © 2020-2023  润新知