聲明:個人刷題筆記感帅,非指導(dǎo)向门扇,如有誤導(dǎo)請見諒雹有;
題目
給你一幅由 N × N 矩陣表示的圖像,其中每個像素的大小為 4 字節(jié)臼寄。請你設(shè)計一種算法件舵,將圖像旋轉(zhuǎn) 90 度。
不占用額外內(nèi)存空間能否做到脯厨?
示例 1:
給定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋轉(zhuǎn)輸入矩陣铅祸,使其變?yōu)?
[
[7,4,1],
[8,5,2],
[9,6,3]
]
思路
- 交換一維坐標(biāo)、二維坐標(biāo),然后交換對應(yīng)的值临梗,有個問題涡扼,交換過的就不能交換了,解決方案是先外層盟庞,再內(nèi)層
- 4 * 4 : [2,0] -> [0,1] ; [3,1] -> [1,0] [i0,i1 ] -> [i1,length - 1 -i0] 這個地方有個坑如果直接 int[][] = arr 會造成引用同樣的位置吃沪,然后會重復(fù)旋轉(zhuǎn)。如果要最低空間復(fù)雜度什猖,我腦殼選擇重啟票彪。
題解
class Solution {
public void rotate(int[][] matrix) {
int n = matrix.length;
int[][] matrix_new = new int[n][n];
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix_new[j][n - i - 1] = matrix[i][j];
}
}
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
matrix[i][j] = matrix_new[i][j];
}
}
}
}
最后那個for著實有點(diǎn)蠢,等以后再來完善吧不狮,還有另外兩種解題方法降铸。
題目鏈接