首页 > 其他分享 >【刷题笔记】48. Rotate Image

【刷题笔记】48. Rotate Image

时间:2023-09-12 13:01:19浏览次数:40  
标签:Rotate matrix 48 Image 旋转 rotate swap input size

题目

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Note:

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:

Given input matrix = 
[
  [1,2,3],
  [4,5,6],
  [7,8,9]
],

rotate the input matrix in-place such that it becomes:
[
  [7,4,1],
  [8,5,2],
  [9,6,3]
]

Example 2:

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

rotate the input matrix in-place such that it becomes:
[
  [15,13, 2, 5],
  [14, 3, 4, 1],
  [12, 6, 8, 9],
  [16, 7,10,11]
]

题目大意

给定一个 n × n 的二维矩阵表示一个图像。将图像顺时针旋转 90 度。说明:你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。

解题思路

  • 给出一个二维数组,要求顺时针旋转 90 度。
  • 这一题比较简单,按照题意做就可以。这里给出 2 种旋转方法的实现,顺时针旋转和逆时针旋转。
    /*
     * clockwise rotate 顺时针旋转
     * first reverse up to down, then swap the symmetry 
     * 1 2 3     7 8 9     7 4 1
     * 4 5 6  => 4 5 6  => 8 5 2
     * 7 8 9     1 2 3     9 6 3
    */
    void rotate(vector<vector<int> > &matrix) {
        reverse(matrix.begin(), matrix.end());
        for (int i = 0; i < matrix.size(); ++i) {
            for (int j = i + 1; j < matrix[i].size(); ++j)
                swap(matrix[i][j], matrix[j][i]);
        }
    }
    
    /*
     * anticlockwise rotate 逆时针旋转
     * first reverse left to right, then swap the symmetry
     * 1 2 3     3 2 1     3 6 9
     * 4 5 6  => 6 5 4  => 2 5 8
     * 7 8 9     9 8 7     1 4 7
    */
    void anti_rotate(vector<vector<int> > &matrix) {
        for (auto vi : matrix) reverse(vi.begin(), vi.end());
        for (int i = 0; i < matrix.size(); ++i) {
            for (int j = i + 1; j < matrix[i].size(); ++j)
                swap(matrix[i][j], matrix[j][i]);
        }
    }

标签:Rotate,matrix,48,Image,旋转,rotate,swap,input,size
From: https://blog.51cto.com/u_16110811/7444534

相关文章

  • 技术文档 | 免下载、0配置、多任务并发,在Docker Image中使用OpenSCA
    想跳过下载步骤快速使用OpenSCA检测代码风险?想实现多个项目并发扫描?在DockerImage中使用OpenSCA即可轻松实现。一起来looklook目的方便用户使用最新版本的 OpenSCA-cli保证环境的一致性,消除不同操作系统对结果的影响可以方便在本地维护不同版本的 OpenSCA-cli方便在特定情况下......
  • 2848.与车相交的点-362
    2848.与车相交的点给你一个下标从0开始的二维整数数组nums表示汽车停放在数轴上的坐标。对于任意下标i,nums[i]=[starti,endi],其中starti是第i辆车的起点,endi是第i辆车的终点。返回数轴上被车任意部分覆盖的整数点的数目。示例1:输入:nums=[[3,6],[1,5],[4......
  • 18、复合类型之指针(P47、P48、P49、P50);C++ primer 2.3.2
    1、C++中的“声明符”是什么?声明符是用来指定变量或函数的类型、名称和属性的符号。例如:intlist[20]; 声明了一个名为list的整型数组,它有20个元素。int是类型说明符,list[20]是声明符char*cp; 声明了一个名为cp的指向字符的指针1。*cp是声明符doublefunc(void);......
  • [ABC248Ex] Beautiful Subsequences
    题意给定排列$P_n$和整数$k$,求满足如下条件的点对$(l,r)$数量。$1\lel\ler\len$。$\max_{i=l}^rP_i-\min_{i=l}^rP_i\ler-l+k$。数据范围\(1\leqN\leq1.4\times10^5\)\(P\)为\(1\)到\(N\)的排列\(0\leqK\leq3\)题解......
  • WPF 使用Image实现动画旋转Loading
    首先需要有一个Loading的图片,(白色背景,白色小圆圈,所以显示看不到): 创建一个用户控件,实现动画的功能:<UserControlx:Class="K.Controls.Controls.LoadingImage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/......
  • P9488 ZHY 的生成树
    2023-07-3119:29:29solutionP9488ZHY的生成树前言这道题就非常的巧,下午上午上课刚讲完筛法,下午就考到了一个很像筛法的题。当时看到这个数据范围尽往线性做法想了,后面实在想不到就开始想如何带\(\log\)做,先拿个\(60\)pts再说。思路看到这样的求最大生成树,首先先排除......
  • 剑指Offer 48. 最长不含重复字符的子字符串
    题目链接:剑指Offer48.最长不含重复字符的子字符串题目描述:请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。解法思路:代码:funclengthOfLongestSubstring(sstring)int{varresintifs==""{returnres}//......
  • P8481 Binary search
    题目传送门思路提供由于题目中询问的是最小需要的查找次数,但是正常的二分查找是不满足我们这道题目的(标准的二分是自定义向下取整,但是没有考虑向上取整的情况),但是只要我们便利出每一种情况(即向上取整和向下取整)就可以了,而DFS作为一种暴力的算法,就能够有效的便利全部情况,这样的......
  • P8482 Number
    题目传送门思路提供首先我们可以从题目给出的部分分入手,先拿到$50$分,这个我们可以通过贪心的手段保证两个数字的总和相同(因为只要保持相同就可以使得两个数的乘积最大),所以每次将数字加在总分较少的字符串上就可以保证两个字符串表示的数字的乘积最大,如果出现两个两个字符串......
  • 用友时空KSOA imagefield SQL注入
    漏洞简介用友时空KSOA平台/servlet/imagefield存在SQL注入漏洞,攻击者可利用该漏洞获取数据库敏感信息。漏洞复现fofa查询:app="用友-时空KSOA"登录页面如下:POC:GET/servlet/imagefield?key=readimage&sImgname=password&sTablename=bbs_admin&sKeyname=id&sKeyvalue=-1'+......