一、題目大意
標簽: 陣列
https://leetcode.cn/problems/rotate-image
給定一個 n × n 的二維矩陣 matrix 表示一個影像,請你將影像順時針旋轉 90 度,
你必須在 原地 旋轉影像,這意味著你需要直接修改輸入的二維矩陣,請不要 使用另一個矩陣來旋轉影像,
示例 1:

輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[7,4,1],[8,5,2],[9,6,3]]
示例 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]]
提示:
- n == matrix.length == matrix[i].length
- 1 <= n <= 20
- -1000 <= matrix[i][j] <= 1000
二、解題思路
一個元素每次90度旋轉,旋轉4次后回到原點,這樣我們找出這四個點的坐標一切就簡單了,令N=martrix.length-1:
(i, j)(N-j, i)(N-i, N-j)(j, N-i)
為了旋轉這四個元素,我們可以用一個臨時變數保存其中一個元素,然后讓幾個元素依次賦值,
那么,一共有多少個這樣的四元素組呢?這要分情況來看,兩層遍歷陣列,第一層i 從0到n/2,第二層j 從j到n-i,這樣遍歷的元素為n/4或(n-1)/4;
三、解題方法
3.1 Java實作
public class Solution {
public void rotate(int[][] matrix) {
// 輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
// 輸出:[[7,4,1],[8,5,2],[9,6,3]]
// x表示行 y表示列
/**
* i 0->n/2 0->2
* j i->n-i i->3-i
* 00 01 02 03
* 11 12
* 從上到下 (j,n-i)
* 從右到左
*
* (j,n-i)<-(i,j)
* (i,j)<-(n-j,i)
* (n-j,i)<-(n-i, n-j)
*/
int temp = 0;
int n = matrix.length - 1;
for (int i = 0; i <= n / 2; i++) {
for (int j = i; j < n - i; j++) {
// 0行n列
temp = matrix[j][n - i];
matrix[j][n - i] = matrix[i][j];
matrix[i][j] = matrix[n-j][i];
matrix[n-j][i] = matrix[n-i][n-j];
matrix[n-i][n-j] = temp;
}
}
}
}
四、總結小記
- 2022/8/4 需要總結一下60多天的刷題了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/500990.html
標籤:其他
