对角线交换]leetcode48:翻转图像(medium)"/>
[数组][对角线交换]leetcode48:翻转图像(medium)
题目:
48. 旋转图像
题解:
- 解法1:找规律
- 转换图像的本质就是着四个点
(i,j) , (j, n-i-1), (n-i-1, n-j-1), (n -j-1, i)
在两两交换,这里需要注意一下需要旋转的层数为n/2
就好了。
- 解法2:翻转
- 旋转图像的本质就是先沿水平对角线翻转,然后再沿正对角线翻转,就得到最后结果了。
代码如下:
class Solution {
public://题解1:找规律,其实每个框架交换四个点的值void rotate_1(vector<vector<int>>& matrix) {int n=matrix.size();for(int i=0;i<n/2;++i){//需要旋转的层数for(int j=i;j<n-i-1;++j){//j最大只能到框架的倒数第二个点,因为j到第一个点时,4个顶点已经交换了,不需要再次交换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;}}}//题解2:翻转void rotate(vector<vector<int>>& matrix){int n=matrix.size();//第一次翻转:沿水平对角线上下翻转for(int i=0;i<n/2;++i){swap(matrix[i],matrix[n-i-1]);}//第二次翻转:沿正对角线翻转for(int i=0;i<n;++i)//[i,j]的坐标是左上三角的坐标点,然后与右下三角的坐标点交换for(int j=i+1;j<n;++j){swap(matrix[i][j],matrix[j][i]);}}
};
更多推荐
[数组][对角线交换]leetcode48:翻转图像(medium)
发布评论