p139 旋转图像(leetcode 48)

一:解题思路

先按照主对角线进行反转,然后列对称进行反转。

如果这个题目改为,将图像逆时针旋转90度。那么解题方法与上面类似,先按主对角线进行反转,然后按照行对称进行反转。

Time:O(n^2),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) 
    {
        if (matrix.size() == 0 || matrix[0].size() == 0) return;
        int n = matrix.size();

        for (int i = 0; i < n; i++)
        {
            for (int j = i; j < n; j++)
            {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[j][i];
                matrix[j][i] = temp;
            }
        }

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n / 2; j++)
            {
                int temp = matrix[i][j];
                matrix[i][j] = matrix[i][n-1-j];
                matrix[i][n - 1 - j] = temp;
            }
        }
    }
};

Java:

class Solution {
        public void rotate(int[][] matrix) 
        {
              if(matrix==null || matrix.length==0 || matrix[0]==null || matrix[0].length==0) return;
              int n=matrix.length;
              
              for(int i=0;i<n;i++)
              {
                  for(int j=i;j<n;j++)
                  {
                      int temp=matrix[i][j];
                      matrix[i][j]=matrix[j][i];
                      matrix[j][i]=temp;
                  }
              }
              
              for(int i=0;i<n;i++)
              {
                  for(int j=0;j<n/2;j++)
                  {
                      int temp=matrix[i][j];
                      matrix[i][j]=matrix[i][n-j-1];
                      matrix[i][n-j-1]=temp;
                  }
              }
        }
    }

 

posted @ 2020-04-16 20:33  repinkply  阅读(180)  评论(0)    收藏  举报