1. 程式人生 > >【LeetCode】48. Rotate Image(C++)

【LeetCode】48. Rotate Image(C++)

地址:https://leetcode.com/problems/rotate-image/

題目:

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

:
在這裡插入圖片描述

Example 2:
在這裡插入圖片描述

理解:

把圖片順時針旋轉。
可以先翻轉,再轉置。

實現:

class Solution {
public:
    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.size();++j)
                swap(matrix[i][j],matrix[j][i]);
        }
    }
};

實現2:

考慮

a b
d c

把左上角的和其他三個位置分別swap也可以

b a
d c

c a
d b

d a
c b

需要確定的就是四個元素的下標。
在這裡插入圖片描述
相當於本次內迴圈完成最外層正方形的旋轉,內層由下一個外迴圈中的內迴圈完成。

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