1. 程式人生 > >旋轉圖像

旋轉圖像

padding png ble 技術 lpad 例如 給定 .com AS

給定一個 n × n 的二維矩陣表示一個圖像。

將圖像順時針旋轉 90 度。示例如下:

給定 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]
]

對於matrix中的元素matrix[i][j],將其旋轉90度後,對應的位置為matrix[j][M-i],M為n-1

如matrix[0][0]的值為5, 旋轉後matrix[0][3-0]的值為5

matrix[1][0]的值為2,旋轉後matrix[0][3-1]的值為2

實現方法:

先將矩陣最外的一圈旋轉,接著逐漸將內部的圈旋轉。

如矩陣

5

1

9

11

2

4

8

10

13

3

6

7

15

14

12

16

首先旋轉最外面的一圈,接著旋轉裏面的一圈。

最外面一圈只需將5、1、9旋轉完成即可,最裏面的一圈只需要旋轉4即可

5->11 11->16 16->15 15->5,同樣的方法旋轉1、9

對於n x n的矩陣

第一圈需要旋轉n-1個元素,matrix[0][0] - matrix[0][n-2]

第二圈需要旋轉n-3個元素,matrix[1][1] - matrix[1][n-3]

第三圈n-5

。。。

如下圖所示:

技術分享圖片

代碼如下:

    public static void rotate(int[][] matrix) {

        int M = matrix.length - 1;
        // 每行需要旋轉的元素個數
        int len = M;
        int temp;
        int i=0, j=0;
        while (len > 0) {

            for (j=i; j<i+len; j++) {
                
// 旋轉四個元素 temp = matrix[j][M-i]; matrix[j][M-i] = matrix[i][j]; matrix[i][j] = matrix[M-j][i]; matrix[M-j][i] = matrix[M-i][M-j]; matrix[M-i][M-j] = temp; } i++; len -= 2; } }

旋轉圖像