旋轉圖像
阿新 • • 發佈:2018-05-01
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; } }
旋轉圖像