题目:把一个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. ThinkPHP创建应用

    新建一个文件 引入ThinkPHP文件

  2. Java学习笔记二:Java开发工具Eclipse的安装与使用

    Java开发工具Eclipse的安装与使用 正如office一样我们在开发java语言过程中同样需要依款不错的开发工具,目前市场上的IDE很多,这里只演示Eclipse的安装: 一:下载软件: 1.下 ...

  3. maven中settings文件的配置

    鉴于上一个博客写的maven打包,读者老爷们可能找不到settings文件的配置,这里专门附上settings文件的配置: 有的settings文件只含有一些空标签,需要手动去配置. <?xml ...

  4. Django的命令操作,python

    忘记时候,查看命令用:python manage.py 1 建立项目的命令: django-admin.py startproject project_name 2 在项目的目录下建立app: dja ...

  5. java程序——两数的加减乘除

    import javax.swing.JOptionPane; // import class JOptionPane public class Elementary { public static ...

  6. MUI:字符串和json数据的相互转换

    JSON.parse()--字符串转换json.JSON.stringify()--json转换成字符串 如:收到Json对象:response,则: {"result":&quo ...

  7. 在Linux下通过rpm打包发布Java程序

    这个东西涉及的内容较多,根据下面这些文章慢慢学习 一个简单的例子 http://blog.csdn.net/king_on/article/details/7169384 按照文章中的步骤来,打包之后 ...

  8. Java泛型的基本介绍与使用

    为什么要使用泛型? 在Java中增加泛型之前,泛型程序设计是用继承来实现的,例如ArrayList,只维护Object引用的数组: public class ArrayList{ private Ob ...

  9. Python全栈 MongoDB 数据库(数据的修改)

    修改操作符的使用   $set 修改一个域的值,增加一个域   阿哲年龄修改为33 db.class1.update({name:'阿哲'},{$set:{age:33}})   如果sex域不存在则 ...

  10. kafka常用命令笔记

    0.查看有哪些主题: ./kafka-topics.sh --list --zookeeper 192.168.0.201:12181 1.查看topic的详细信息 ./kafka-topics.sh ...