题目:

给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像

样例:

给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]

思路:

  • 思路一:先将矩阵转置,然后每一列的元素反转;(可画图理解)
  • 思路二:找出每个元素旋转后的矩阵位置,即a[i] [j]==>a[j] [n-1-i]。
    这种方法很容易在for循环的条件设置中出错,由于每次转换四个数a[n-1-j] [i],a[i] [j],a[j] [n-1-i],a[n-1-i] [n-1-j],对于每一次循环数会从i,n-1-i收缩,所以i只要循环n/2次就好了;对于数,从i开始,到n-1-i。
    还有一处需要注意:a[i] [j] ==> a[j] [n-i-1]的数学表达式应该是a[j] [n-i-1] = a[i] [j]。

参考答案:

class Solution {
public:
    /*
     * @param matrix: a lists of integers
     * @return: 
     */
    void rotate(vector<vector<int>> &matrix) {
        // write your code here
      /*思路一:先转置,再反转
        int n= matrix.size();
        for(int i=0 ;i<n; i++){
            for(int j=i+1; j<n; j++){
                swap(matrix[i][j],matrix[j][i]);
            }
        reverse(matrix[i].begin(), matrix[i].end());
        }
    }*/
    //思路二:找出每个元素旋转后的矩阵位置
    int n = matrix.size();
    int temp;
    //两个for循环的条件很重要!
    for(int i=0; i<n/2; i++){
        for(int j=i; j<n-1-i; j++){
            temp = matrix[j][n-1-i];//需要注意
            matrix[j][n-1-i] = matrix[i][j];//需要注意
            matrix[i][j] = matrix[n-1-j][i] ;
            matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
            matrix[n-1-i][n-1-j] = temp;
        }
    }
}
};

wydong
40 声望5 粉丝

wyd


下一篇 »
矩阵归零