zoukankan      html  css  js  c++  java
  • 算法(4) Rotate Image

    题目:把一个N×N的矩阵旋转90°

    思路:这个题目折腾了好长时间,确切地说是两个小时!这道题也反映出自己的逻辑比较混乱

    这道题我到底卡在了哪里?自己已经在本子上画出了一个转移的关系

    a[0][0] - > a[0][3]

    a[0][1] -> a[1][3]

    a[0][2] -> a[2][3]

    a[0][3] -> a[3][3]

    a[1][0] -> a[0][2]

    a[1][1] ->a[1][2]

    a[1][2] -> a[2][2]

    a[1][3] -> a[3][2]

    .......

    但是到这里戛然而止!!!然后想着是一圈圈朝里找,但是发现需要两个临时的变量(混乱的逻辑!),并且没有总结一个公式出来

    1) 发现需要两个变量的问题:梗是在顺时针思考问题了:之前是按照如下的顺时针去思考问题,那么我在覆盖下一个之前肯定是要存储下来啊,那么下下个也是要存储下来的,在这里也就乱了!但是如下面所示,其实我只要记录下a[0][0]就好了,接着用倒数第4个数去填a[0][0],然后用倒数第3个数去填倒数第4个数,然后用倒数第2个数去填倒数第3个数,然后是用倒数第1个数去填倒数第二个,逆向思维啊逆向思维

    a[0][0]->a[0][3]

    a[0][3]->a[3][3]

    a[3][3]->a[3][0]

    a[3][0]->a[0][0]

    2)那么公式到底是什么呢?首先得明白整个操作都是在矩阵的边缘操作的:

                temp = matrix[i][j];
                matrix[i][j] = matrix[upBd-j+i][i];
                matrix[upBd-j+i][i] = matrix[upBd][upBd-j+i];
                matrix[upBd][upBd-j+i] = matrix[j][upBd];
                matrix[j][upBd] = temp;
     都是在边缘操作的,并不难!

    折腾了两天,算是理出了头绪

    答案:https://github.com/honpey/codebox/blob/master/leetcode/array/p48.cpp

    leetcode上有更加行数更少的解法:

    https://leetcode.com/problems/rotate-image/#/solutions

  • 相关阅读:
    python自定义排序
    flex 布局
    display: table-cell; 元素上下左右居中,子元素无宽高
    transform 方法 上下左右元素居中 子元素无宽高
    flex 方法上下左右居中 子元素无宽高
    兼容-02
    兼容
    jS辨别访问浏览器判断是android还是ios系统
    选项卡
    返回顶部
  • 原文地址:https://www.cnblogs.com/honpey/p/6771314.html
Copyright © 2011-2022 走看看