栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【数据结构基础

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【数据结构基础

原题链接:Leetcode 48. Rotate Image

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

You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

Example 1:

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[7,4,1],[8,5,2],[9,6,3]]

Example 2:

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

Constraints:

  • n == matrix.length == matrix[i].length
  • 1 <= n <= 20
  • -1000 <= matrix[i][j] <= 1000

方法一:原地旋转 思路:

问题的关键就是在于 如何防止覆盖 、 确定旋转的范围
那么可以用一个临时变量来暂存一个结点的值来防止覆盖
画图来确定旋转的范围:

当n为偶数时:

旋转 i = n/2, j = n/2的区间

当n为奇数时:

旋转 i = n/2,j = (n+1)/2的区间,最中间的白色部分不需要旋转

C++代码:
class Solution {
public:
    void rotate(vector>& matrix) {
        // n边长
        int n = matrix.size();

        for (int i = 0; i < n / 2; ++i) {
            for (int j = 0; j < (n + 1) / 2; ++j) {
                // tmp用于暂存
                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(n2),两重循环,i和j都是和n相关
  • 空间复杂度:O(1),常数个临时变量
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1025640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号