旋转图像-LeetCode

题目:

在这里插入图片描述
原文链接:https://leetcode-cn.com/problems/rotate-image/

思路1(暴力法):

  1. 首先暴力法,遍历一次用一个中间矩阵保存旋转过后的元素位置,再遍历一次将中间矩阵的值赋给原矩阵
  2. 但是由于题目要求原地旋转,所以放弃,但是保留下思路代码

代码1:

class Solution {
    
    
    public void rotate(int[][] matrix) {
    
    
        int n = matrix.length;
        int[][] newMatrix = new int[n][n];
        for(int i = 0;i<n;i++){
    
    
            for(int j=0;j<n;j++){
    
    
                newMatrix[j][n-i-1] = matrix[i][j];
            }
        }

        for(int i =0;i<n;i++){
    
    
            for(int j=0;j<n;j++){
    
    
                matrix[i][j] = newMatrix[i][j];
            }
        }
        
    }
}

思路2(原地翻转):

  1. 先上下翻转,然后以左上-右下对角线翻转,就能达到顺时针旋转90度的效果,注意这题是n*n的矩阵

代码2:

class Solution {
    
    
    public void rotate(int[][] matrix) {
    
    
        int n = matrix.length;
        // 上下翻转
        for(int i=0;i<n/2;i++){
    
    
            for(int j=0;j<n;j++){
    
    
                swap(matrix,i,j,n-i-1,j);
            }
        }
		// 按对角线翻转
        for(int i=0;i<n;i++){
    
    
            for(int j=0;j<i;j++){
    
    
                swap(matrix,i,j,j,i);
            }
        }
        
    }
    public void swap(int[][] matrix, int x,int y, int m,int n){
    
    
        int temp = matrix[x][y];
        matrix[x][y] = matrix[m][n];
        matrix[m][n] = temp;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_35221523/article/details/112750607
今日推荐