leetcode 48 Rotate Image

題目詳情

You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Note:
You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and do the rotation.

這道題目要求咱們對一個正方形矩陣進行順時針90度的翻轉。而且要求不聲明額外的空間,不能新建二維數組。數組

Example 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]
]code

想法

  • 這道題由於要求「在位」。因此咱們須要找到一種解法,使得每次操做都是交換兩個元素的位置,最後實現整個矩陣的旋轉。
  • 咱們先對整個矩陣進行上下翻轉。以下
  • 123 789
  • 456 -> 456
  • 789 123
  • 而後對矩陣進行沿對角線的翻轉。以下
  • 789 741
  • 456 -> 852
  • 123 963
  • 就獲得了咱們最後旋轉90度的矩陣。

解法

//先將上下翻轉,再沿對角線翻轉
    public void rotate(int[][] matrix) {
        int height = matrix.length;
        int width = matrix[0].length;
        //上下翻轉
        for(int i=0;i<height/2;i++){
            for(int j=0;j<width;j++){
                int temp = matrix[i][j];
                matrix[i][j] = matrix[height-i-1][j];
                matrix[height-i-1][j] = temp;
            }
        }
        //沿對角線翻轉
        for(int i=0;i<height;i++){
            for(int j=i;j<width;j++){
                int temp = matrix[i][j];
                //System.out.println(temp);
                matrix[i][j] = matrix[j][i];
                matrix[j][i] =  temp;
            }
        }
        return;
    }
相關文章
相關標籤/搜索