LeetCode之Rotate Image

2014-11-24 08:16:05 · 作者: · 浏览: 0

【题目】

You are given an n x n 2D matrix representing an image.

Rotate the image by 90 degrees (clockwise).

Follow up:
Could you do this in-place

【题意】

给定一个n*n个2维矩阵来表示一个图。在原矩阵上旋转图形90°。

【分析】

思路1:

\ < http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+QVswXVswXSAtPiBBWzBdWzNdQVsxXVswXSAtPiBBWzBdWzJdPC9wPgo8cD5BWzBdWzFdIC0+IEFbMV1bM11BWzJdWzBdIC0+IEFbMF1bMV08L3A+CjxwPkFbMF1bMl0gLT4gQVsyXVszXUFbM11bMF0gLT4gQVswXVswXTwvcD4KPHA+QVswXVszXSAtPiBBWzNdWzNdIDwvcD4KPHA+08m0y7/JtcOjurbU09puICogbiC1xDLOrL7Y1fM8L3A+CjxwPkFbaV1bal0gLT4gQVtqXVtuLTEtaV08L3A+CjxwPjxicj4KPC9wPgo8cD7LvMK3MqO6PC9wPgo8cD60v8SjxOKjrLTTzeK1vcTa0rvIptK7yKa1xNeqo6y1q9XiuPa3vbeozKvC/aGjPC9wPgo8cD5BW2ldW2pdIC0+IEFbal1bbi0xLWldIC0+IEFbbi0xLWldW24tMS1qXSAtPiBBW24tMS1qXVtpXSAtPiBBW2ldW2pdPC9wPgo8cD48aW1nIHNyYz0="https://www.cppentry.com/upload_files/article/49/1_is82a__.jpg" alt="\">\\


思路3:

\

【代码1】

/*********************************
*   日期:2014-01-21
*   作者:SJF0115
*   题号: Rotate Image
*   来源:http://oj.leetcode.com/problems/rotate-image/
*   结果:AC
*   来源:LeetCode
*   总结:
**********************************/
#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; class Solution { public: void rotate(vector
      
        > &matrix) { int i,j; int n = matrix.size(); vector
       
         >tempMatrix = matrix; for(i = 0;i < n;i++){ for(j = 0;j < n;j++){ tempMatrix[j][n-1-i] = matrix[i][j]; }//for }//for for(i = 0;i < n;i++){ for(j = 0;j < n;j++){ matrix[i][j] = tempMatrix[i][j]; }//for }//for } }; int main() { Solution solution; vector
        
          row1 = {1,2,3}; vector
         
           row2 = {4,5,6}; vector
          
            row3 = {7,8,9}; vector
           
            > matrix; matrix.push_back(row1); matrix.push_back(row2); matrix.push_back(row3); solution.rotate(matrix); int n = matrix.size(); for(int i = 0;i < n;i++){ for(int j = 0;j < n;j++){ printf("%d ",matrix[i][j]); }//for printf("\n"); }//for return 0; } 
           
          
         
        
       
      
     
    
   
  
原地旋转,不能使用额外的空间存储矩阵。虽然本代码能AC,但是不符合题意。

【代码2】

class Solution {
public:
    void rotate(vector
  
    > &matrix) {
        int i,j,temp;
        int n=matrix.size();
        for(i = 0;i < n/2;++i) {
            for (j = i;j < n-1-i;++j) {
                temp = matrix[j][n-i-1];
                matrix[j][n-i-1] = 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] = temp;
            }//for
        }//for
    }
};
  

【代码3】

class Solution {
public:
    void rotate(vector
  
    > &matrix) {
        int i,j,temp;
        int n=matrix.size();
        // 沿着副对角线反转
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n - i; ++j) {
                temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - j][n - 1 - i];
                matrix[n - 1 - j][n - 1 - i] = temp;
            }
        }
        // 沿着水平中线反转
        for (int i = 0; i < n / 2; ++i){
            for (int j = 0; j < n; ++j) {
                temp = matrix[i][j];
                matrix[i][j] = matrix[n - 1 - i][j];
                matrix[n - 1 - i][j] = temp;
            }
        }
    }
};