【数组】48. 旋转图像

题目:

 

 

解答:

方法 1 :转置加翻转

最直接的想法是先转置矩阵,然后翻转每一行。这个简单的方法已经能达到最优的时间复杂度O(N^2)

 1 class Solution {
 2   public void rotate(int[][] matrix) {
 3     int n = matrix.length;
 4 
 5     // transpose matrix
 6     for (int i = 0; i < n; i++) {
 7       for (int j = i; j < n; j++) {
 8         int tmp = matrix[j][i];
 9         matrix[j][i] = matrix[i][j];
10         matrix[i][j] = tmp;
11       }
12     }
13     // reverse each row
14     for (int i = 0; i < n; i++) {
15       for (int j = 0; j < n / 2; j++) {
16         int tmp = matrix[i][j];
17         matrix[i][j] = matrix[i][n - j - 1];
18         matrix[i][n - j - 1] = tmp;
19       }
20     }
21   }
22 }

 

方法二:

 

 

 

 

 1 class Solution {
 2     public void rotate(int[][] matrix) {
 3         int temp=-1;
 4         for(int start=0,end=matrix[0].length-1;start<end;start++,end--){
 5             for(int s=start,e=end;s<end;s++,e--){
 6                 temp=matrix[start][s];
 7                 matrix[start][s]=matrix[e][start];
 8                 matrix[e][start]=matrix[end][e];
 9                 matrix[end][e]=matrix[s][end];
10                 matrix[s][end]=temp;
11             };
12         };
13     }
14 }

 

posted @ 2020-05-05 15:14  梦醒潇湘  阅读(161)  评论(0)    收藏  举报