题目:把一个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

算法(4) Rotate Image的更多相关文章

  1. 记一道有意思的算法题Rotate Image(旋转图像)

    题出自https://leetcode.com/problems/rotate-image/ 内容为: You are given an n x n 2D matrix representing an ...

  2. LeetCode算法题-Rotate String(Java实现)

    这是悦乐书的第317次更新,第338篇原创 在开始今天的算法题前,说几句,今天是世界读书日,推荐两本书给大家,<终身成长>和<禅与摩托车维修艺术>,值得好好阅读和反复阅读. 0 ...

  3. LeetCode算法题-Rotate Array(Java实现)

    这是悦乐书的第184次更新,第186篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第43题(顺位题号是189).给定一个数组,将数组向右旋转k步,其中k为非负数.例如: ...

  4. 排列算法(reverse...rotate...next_permutation)

    #include <iostream> #include <algorithm> #include <cstring> using namespace std; i ...

  5. 算法(3)Rotate Array

    题目:将一个n个元素的数组右移k位,比如n=7,k=3,对数组[1,2,3,4,5,6,7]作如下旋转[5,6,7,1,2,3,4] 思路:[5,6,7,1,2,3,4],不知大家看出来了没有呢,两次 ...

  6. 从零开始学C++之STL(七):剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)

    一.移除性算法 (remove)  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  7. 剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)

    一.移除性算法 (remove)  C++ Code  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...

  8. STL基础--算法(修改数据的算法)

    修改元素的算法 copy, move, transform, swap, fill, replace, remove vector<int> vec = {9,60,70,8,45,87, ...

  9. 每日算法37:Rotate Image (图像旋转)

    You are given an n x n 2D matrix representing an image. Rotate the image by 90 degrees (clockwise). ...

随机推荐

  1. Docker运行Nginx服务器

    一.获取Docker容器的Nginx镜像 二.创建Docker容器宿主机挂载目录 # 创建挂载目录,-v 显示创建的目录名 [root@idclooknet ~]# mkdir -vp /opt/do ...

  2. Redis学习推荐

    Redis快速入门 https://www.yiibai.com/redis/redis_quick_guide.html Redis用途和使用场景 https://blog.csdn.net/wei ...

  3. ruby 数据类型Range

    范围(Range)无处不在:a 到 z. 0 到 9.等等.Ruby 支持范围,并允许我们以不同的方式使用范围: 作为序列的范围 作为条件的范围 作为间隔的范围 作为序列的范围 (1..5) #==& ...

  4. linux文件操作篇 (三) 文件状态和操作属性

    #include <sys/stat.h>   int fstat(int fildes, struct stat *buf); 获取文件信息  int lstat(const char* ...

  5. FPGA算法学习(1) -- Cordic(圆周系统之旋转模式)

    三角函数的计算是个复杂的主题,有计算机之前,人们通常通过查找三角函数表来计算任意角度的三角函数的值.这种表格在人们刚刚产生三角函数的概念的时候就已经有了,它们通常是通过从已知值(比如sin(π/2)= ...

  6. RedHat6.4 安装yum源

    主要参考: http://blog.itpub.net/25313300/viewspace-708509/ http://blog.sina.com.cn/s/blog_50f908410101ct ...

  7. Linq中dbSet 的查询

    1.Find:按照关键字的ID号来查询(速度快) 如: ADShiTi aDShiTi = db.ADShiTis.Find(id); 2.FirstOrDefault:根据部分条件查询,显示最前的一 ...

  8. 转载:BUG定位

    1.web前端 Web前端就是通常说的网页.互联网公司的前端一般包含如下内容:JavaScript.ActionScript.CSS.HTML(..ML).Flash.交互式设计.视觉设计 web前端 ...

  9. LeetCode:12. Integer to Roman(Medium)

    1. 原题链接 https://leetcode.com/problems/integer-to-roman/description/ 2. 题目要求 (1) 将整数转换成罗马数字: (2) 整数的范 ...

  10. 删除txt文件内容

    删除txt文件里的 聊天记录的时间那一行 f = open("d:\\面试.txt", "r") g = open("d:\\英雄联盟ADC技巧.tx ...