题目描述

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。

说明:

你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

示例

给定 matrix =
[
[ 5, 1, 9,11],
[ 2, 4, 8,10],
[13, 3, 6, 7],
[15,14,12,16]
],

原地旋转输入矩阵,使其变为:
[
[15,13, 2, 5],
[14, 3, 4, 1],
[12, 6, 8, 9],
[16, 7,10,11]
]

方法一:暴力解法

  • 可以轻易的找出旋转的规律:原矩阵的第一行变成新矩阵的最后一列,原矩阵的第二行变成新矩阵的倒数第二列、、、依次类推
class Solution {public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();auto matrix_new = matrix;for (int i = 0; i < n; i++) {for (int j = 0; j < n;j++) {matrix_new[j][n - i - 1] = matrix[i][j];}}matrix = matrix_new;}
};

复杂度分析

  • 时间复杂度:O(N^2),其中 N 是 matrix 的边长。

  • 空间复杂度:O(N^2)。我们需要使用一个和matrix 大小相同的辅助数组。

方法二:原地解法(in place)

由方法一的关键等式:matrix_new[j][n - i - 1] = matrix[i][j];
但是如果直接原地复制操作的话就是把矩阵的值覆盖掉,所以需要创建一个临时变量temp,然后进行展开:

class Solution {public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();for (int i = 0; i < n / 2; i++) {for (int j = 0; j < (n + 1) / 2; j++) {int temp = matrix[i][j];matrix[i][j] = matrix[n - j - 1][i];matrix[n - j - 1][i] = matrix[n - i - 1][n - j - 1];matrix[n - i - 1][n - j - 1] = matrix[j][n - i - 1];matrix[j][n - i - 1] = temp;}}}
};

复杂度分析

  • 时间复杂度:O(N^2),.
    其中 N 是 matrix 的边长。我们需要枚举的子矩阵大小为 O(⌊n/2⌋×⌊(n+1)/2⌋)=O(N^2)。

  • 空间复杂度:O(1)。为原地旋转。

方法三:上下翻转 然后矩阵转置即可

  • 这个方法非常容易理解,也非常简单,但是需要练习了足够多的题目才可以很快的想出来哦!
class Solution {public:void rotate(vector<vector<int>>& matrix) {int n = matrix.size();if (n <= 1)return;int temp;//将矩阵上下翻转for (int i = 0; i < n / 2; ++i) {for (int j = 0; j < n; ++j) {temp = matrix[i][j];matrix[i][j] = matrix[n - 1 - i][j];matrix[n - 1 - i][j] = temp;}}//矩阵的转置for (int i = 0; i < n; ++i) {for (int j = i; j < n; ++j) {temp = matrix[i][j];matrix[i][j] = matrix[j][i];matrix[j][i] = temp;}}return;}
};

复杂度分析:

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

力扣-48 旋转图像相关推荐

  1. 力扣--48旋转图像(中等)

    题目 python 代码 def rotate(self, matrix):for i in range(len(matrix)):for j in range(i + 1, len(matrix)) ...

  2. 最大子序列和问题c语言力扣,力扣

    力扣刷题-第1题:两数之和2021-05-24 22:03:30 目录 一.写在最前面 二.题目信息 解题思路 一.写在最前面 致愿意重新开始努力的自己: 希望你能够持续的坚持,不半途而废. 二.题目 ...

  3. [算法]力扣刷题-初级算法 - 数组(三)(数组篇完结) [两数之和] [有效的数独] [旋转图像]

    初级算法 - 数组篇完结: 初级算法 - 数组(一): https://blog.csdn.net/weixin_43854928/article/details/121315702 初级算法 - 数 ...

  4. 力扣LeetCode(二)T41-T80

    文章目录 41.缺失的第一个正数 42.接雨水 43.字符串相乘 44.通配符匹配 45.跳跃游戏 II (贪心) 46.全排列(两种模板) 47.全排列 II(序列不重模板) 48.旋转图像 49. ...

  5. 每日一道leetcode(python)48. 旋转图像

    每日一道leetcode(python)48. 旋转图像 2021-07-27 给定一个 n × n 的二维矩阵 matrix 表示一个图像.请你将图像顺时针旋转 90 度. 你必须在 原地 旋转图像 ...

  6. 力扣(LeetCode)刷题,简单+中等题(第30期)

    目录 第1题:单词规律 第2题:找不同 第3题:在排序数组中查找元素的第一个和最后一个位置 第4题:使用最小花费爬楼梯 第5题:寻找峰值 第6题:字符串中的第一个唯一字符 第7题:两个数组的交集 II ...

  7. 力扣(LeetCode)刷题,简单题(第24期)

    目录 第1题:两个列表的最小索引总和 第2题:反转字符串中的元音字母 第3题:整数反转 第4题:将有序数组转换为二叉搜索树 第5题:第N个泰波那契数 第6题:数组序号转换 第7题:质数排序 第8题:日 ...

  8. 《LeetCode力扣练习》剑指 Offer 30. 包含min函数的栈 Java

    <LeetCode力扣练习>剑指 Offer 30. 包含min函数的栈 Java 一.资源 题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调 ...

  9. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  10. 《LeetCode力扣练习》第96题 不同的二叉搜索树 Java

    <LeetCode力扣练习>第96题 不同的二叉搜索树 Java 一.资源 题目: 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回 ...

最新文章

  1. pix2pixHD笔记
  2. Window下VS运行达梦DPI
  3. jvm 架构_不可变的基础架构,热部署和JVM
  4. db2有主键时默认hash分区_不允许设置db2主键问题的解决
  5. 基于汇编语言及Proteus仿真的CPU8086水库水位监视系统
  6. 数据结构(字符串)—— 两字符串前后缀相等
  7. oracle 修索引改空间_oracle 修改索引现有表空间
  8. 广义圆方树+树链剖分+set(Codeforces Round #278 (Div. 1): E. Tourists)
  9. 目标检测标注格式转换:labelme2yolo yolo2labelme
  10. nagios搭建和邮件短信报警设置
  11. 计算机组成原理面试常见问题
  12. Adobe发布Flash 10 Player
  13. 实验2:tga格式图像转换为yuv格式
  14. [转帖]CAPCOM的详细历史
  15. python小游戏贪吃蛇下载_python实现贪吃蛇小游戏
  16. mysql migration toolkit下载_MySQL Migration Toolkit
  17. React Native入门——布局实践:开发京东客户端首页
  18. 微信公众号平台服务器配置请求url超时,绑定微信公众平台提示请求URL超时怎么办...
  19. 苹果电脑装 WIN7 黑屏问题解决办法
  20. 谈谈测试过程中常见的几个问题

热门文章

  1. 详解.NET IL代码
  2. Digit-Sum(HDU - 5710)
  3. mongodb update操作
  4. SpringMVC对象绑定时自定义名称对应关系
  5. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;...
  6. enumerateObjectsUsingBlock 、for 、for(... in ...) 的区别 性能测试
  7. asp.net 获取IP地理位置的几个主要接口
  8. 拨码开关控制数码管的数字显示_VHDL编程
  9. lambda表达式和切片
  10. Transformers资料汇总,从概要到原理到应用