LeetCode-48. Rotate Image

Description

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]
]

Solution 1(C++)

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int m=matrix.size();
        for(int i=0; i<m-1; i++){
            for(int j=i; j<m-i-1; j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[m-j-1][i];
                matrix[m-j-1][i] = matrix[m-i-1][m-j-1];
                matrix[m-i-1][m-j-1] = matrix[j][m-i-1];
                matrix[j][m-i-1] = temp;
            }
        }
        return;
    }
};

Solution 2(C++)

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int start = 0, end = matrix.size()-1;
        while(start<end){
            for(int i=start; i<end; i++){
                int offset = i-start;
                int tmp = matrix[start][i];
                matrix[start][i] = matrix[end-offset][start];
                matrix[end-offset][start] = matrix[end][end-offset];
                matrix[end][end-offset] = matrix[start+offset][end];
                matrix[start+offset][end] = tmp;
            }
            start++; end--;
        }
    }
};

Solution 3(C++)

class Solution {
public:
    void rotate(vector<vector<int>>& m) {
        int n = m.size();

        for(int i=0; i<n; i++)
            for(int j=0; j<i; j++)
                swap(m[i][j], m[j][i]);

        for(int i=0; i<n; i++)
            reverse(m[i].begin(), m[i].end());
    }
};

Analysis of Algorithms

There are three main algorithms listed, you can take a look. My problem is mainly that the solution method 1 has deduced the formula, but the calculation is in the wrong direction, and the assignment order is reversed. In fact, the calculation is to rotate 90 degrees to the left.

program analysis

slightly.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324821742&siteId=291194637