1. 程式人生 > >Leetcode 旋轉影象(c++)

Leetcode 旋轉影象(c++)

給定一個 n × n 的二維矩陣表示一個影象。

將影象順時針旋轉 90 度。

說明:

你必須在原地旋轉影象,這意味著你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉影象。

示例 1:

給定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],

原地旋轉輸入矩陣,使其變為:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
示例 2:

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

解:觀察矩陣,發現旋轉90°就是最後一排變成第一列,依次轉變。
由於不能用額外的矩陣,所以先將最後一排的元素依次插入每一排的最後,直到第一排元素依次插入完畢。
最後將每一排的前四個元素刪除即可。

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int len=matrix.size(); //因為是nxn的矩陣,所以兩個vector的len是一樣長的,所以通用。
        for (int i=len-1;i>=0;--i){
            for
(int j=0;j<len;++j){ matrix[j].push_back(matrix[i][j]); } } for (int k=0;k<len;++k ){ matrix[k].erase(matrix[k].begin(),matrix[k].begin()+len); } } };