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

  • 相关阅读:
    haproxy实现负载均衡集群
    docker私有仓库搭建,证书认证,鉴权管理
    dockerhub私有镜像仓库harbor部署
    Delphi用窗体类名创建窗体(需要用到GetClass)
    Delphi中Class of 第二篇
    Delphi中Class of
    Delphi中ADO之初识
    Delphi遍历枚举
    二进制乘除的原理
    Delphi图像处理之图像着色
  • 原文地址:https://www.cnblogs.com/honpey/p/6771314.html
Copyright © 2011-2022 走看看