首页 > 其他分享 >LeetCode 48.旋转图像(中等)

LeetCode 48.旋转图像(中等)

时间:2022-11-25 13:34:05浏览次数:50  
标签:11 matrix 48 示例 元素 矩阵 16 图像 LeetCode

题目描述:

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

示例 1:

LeetCode 48.旋转图像(中等)_顺时针


输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]

示例 2:

LeetCode 48.旋转图像(中等)_顺时针_02


输入: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]]

示例 3:

输入:matrix = [[1]]
输出:[[1]]

示例 4:

输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]

提示:

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

题目分析:

这道题要求在原地对矩阵进行顺时针旋转 ​​90​​​ 度的操作,我们拿示例 2 对顺时针旋转 ​​90​​ 度进行说明。

LeetCode 48.旋转图像(中等)_二维_03

在上图中,相同颜色代表着需要相互交换的四个元素。例如红色方块,元素 ​​5​​​ 需要移动到元素 ​​11​​​ 的位置上,元素 ​​11​​​ 又要移动到元素 ​​16​​​ 的位置上,依次类推。所以,要在原地交换这四个元素,我们自然想到要一个临时变量存放其中一个元素值。例如,我们先把元素 ​​11​​​ 存起来,然后把元素 ​​5​​​ 放到元素 ​​11​​​ 的位置上,接着把元素 ​​15​​​ 放到元素 ​​5​​​ 的位置上,把元素 ​​16​​​ 放到原来元素 ​​15​​​ 的位置上,最后把存起来的元素 ​​11​​​ 放到原来元素 ​​16​​​ 的位置上,这样,四个元素就互换完毕。每次需要执行这样的四元素互换的次数为 ​​n - 1​​​ 次。循环交换完外面的矩阵元素后,再缩小矩阵,在内层矩阵继续执行四元素互换操作,最终就能得到顺时针旋转 ​​90​​ 度的矩阵了。

题解:

执行用时: 0 ms

内存消耗: 38.5 MB

class Solution {
public void rotate(int[][] matrix) {
// 临时变量存放要交换的元素值
int temp = 0;
int n = matrix.length - 1;
// 循环交换四个元素,由外向内
for (int i = 0; i <= n / 2; ++i) {
for (int j = i; j < n - i; ++j) {
temp = matrix[j][n - i];
matrix[j][n-i] = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
matrix[n-j][i] = matrix[n-i][n-j];
matrix[n-i][n-j] = temp;
}
}
}
}

题目来源:力扣(LeetCode)




标签:11,matrix,48,示例,元素,矩阵,16,图像,LeetCode
From: https://blog.51cto.com/u_15891283/5886572

相关文章

  • LeetCode 260.只出现一次的数字III(中等)
    题目描述:给定一个整数数组​​nums​​,其中恰好有两个元素只出现一次,其余所有元素均出现两次。找出只出现一次的那两个元素。你可以按任意顺序返回答案。进阶:你的算法......
  • LeetCode 476.数字的补数(简单)
    题目描述:给你一个正整数​​num​​,输出它的补数。补数是对该数的二进制表示取反。示例1:输入:num=5输出:2解释:5的二进制表示为101(没有前导零位),其补数为010。所以......
  • LeetCode 693.交替位二进制数(简单)
    题目描述:给定一个正整数,检查它的二进制表示是否总是0、1交替出现:换句话说,就是二进制表示中相邻两位的数字永不相同。示例1:输入:n=5输出:true解释:5的二进制表示是:101示......
  • LeetCode 268.丢失的数字(简单)
    题目描述:给定一个包含​​[0,n]​​​中​​n​​​个数的数组​​nums​​​,找出​​[0,n]​​这个范围内没有出现在数组中的那个数。进阶:你能否实现线性时间......
  • LeetCode 338.比特位计数(简单)
    题目描述:给你一个整数​​n​​​,对于​​0<=i<=n​​​中的每个​​i​​​,计算其二进制表示中​​1​​​的个数,返回一个长度为​​n+1​​​的数组​......
  • LeetCode 540.有序数组中的单一元素
    LeetCode540.有序数组中的单一元素题目链接:​​https://leetcode-cn.com/problems/single-element-in-a-sorted-array/​​题目描述:给定一个只包含整数的有序数组,每个元......
  • LeetCode 154.寻找旋转排序数组中的最小值II
    LeetCode154.寻找旋转排序数组中的最小值II题目链接:​​https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array-ii/​​题目描述:已知一个长度为 n ......
  • LeetCode 81.搜索旋转排序数组II
    LeetCode81.搜索旋转排序数组II题目链接:​​https://leetcode-cn.com/problems/search-in-rotated-sorted-array-ii/​​题目描述:已知存在一个按非降序排列的整数数组 n......
  • LeetCode 34.在排序数组中查找元素的第一个和最后一个位置
    LeetCode34.在排序数组中查找元素的第一个和最后一个位置题目链接:​​https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/​​......
  • LeetCode 76.最小覆盖子串
    LeetCode76.最小覆盖子串题目链接:​​https://leetcode-cn.com/problems/minimum-window-substring/​​题目描述:给你一个字符串 s 、一个字符串 t 。返回 s 中涵......