美文网首页
给定一个 n × n 的二维矩阵表示一个图像, 将图像顺时针旋转

给定一个 n × n 的二维矩阵表示一个图像, 将图像顺时针旋转

作者: 小强不是蟑螂啊 | 来源:发表于2019-04-03 21:41 被阅读0次

    题目:
    给定一个 n × n 的二维矩阵表示一个图像。
    将图像顺时针旋转 90 度。
    说明:
    你必须在
    [原地]旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
    刚开始我大概看了下,就是把矩阵中第n列反序后作为n行,那这就很简单了,我是这么写的:

    var rotate = function(arr) {
        var newArr = [];
        var len = arr.length;
        for(var i=0;i<len;i++){
            let colArr = [];
            for(var j=0;j<len;j++){
                colArr.push(arr[j][i]);
            }
            colArr.reverse();
            newArr[i] = colArr;
        }
        return newArr;
     };
    

    最后返回的矩阵排序是正确的,不过最后去校验的时候发现是在原来的矩阵里调整,那也简单,我把久的矩阵的值改成和新矩阵相同就可以了:

    var rotate = function(arr) {
      // 设置一个空数组
       var newArr = [];
       var len = arr.length;
       for(var i=0;i<len;i++){
           //在这里,j是遍历的,i是不变的,所以我用arr[j][i]可以取到矩阵每列的值
           let colArr = [];
           for(var j=0;j<len;j++){
               colArr.push(arr[j][i]);
           }
          //然后反序
           colArr.reverse();
         //最后放到新数组中
           newArr[i] = colArr;
       }
      //将新矩阵中的每个值赋给旧矩阵
       for(var m=0;m<len;m++){
           for(var n=0;n<len;n++){
               arr[m][n]=newArr[m][n]
           }
       }
       return arr
    };
    

    我这种解法只是发现了这个规律,如果不让用新矩阵作为桥梁,不知还会有那些解法

    相关文章

      网友评论

          本文标题:给定一个 n × n 的二维矩阵表示一个图像, 将图像顺时针旋转

          本文链接:https://www.haomeiwen.com/subject/oxmtiqtx.html