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

  • 相关阅读:
    高效 JavaScript
    什么是QName【转】
    gson的简单使用方法
    SWT的FormLayout
    SWT/JFace常用组件容器类
    更改swing应用程序标题栏默认图标
    面试也是自己对自己的面试
    关于Android图片cache处理方法
    【Java】_2_Java程序入门第二课
    【算法和数据结构】_9_线性结构_队列_续_1
  • 原文地址:https://www.cnblogs.com/honpey/p/6771314.html
Copyright © 2011-2022 走看看