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

  • 相关阅读:
    C#调用C++代码遇到的问题总结
    ASP.NET MVC Controller的激活
    利用fis3自动化处理asp.net项目静态资源时遇到的一个编码问题
    工作中遇到的一个多线程下导致RCW无法释放的问题
    在mongoose中使用$match对id失效的解决方法
    passport源码研究
    android手机旋转屏幕时让GridView的列数与列宽度自适应
    git 版本回退
    梦之解读:如何成为牛人
    DataTable与DTO对象的简易转换类
  • 原文地址:https://www.cnblogs.com/honpey/p/6771314.html
Copyright © 2011-2022 走看看