【leetcode】48.(Medium)Rotate Image
阿新 • • 發佈:2018-11-10
解題思路:
首先如果二維陣列是11或者22,直接蠻力計算;
如果是22以上,可以一圈一圈(rotate circle)地計算反轉90度之後的結果。
比如,對於下面55的陣列:
首先設定一個數組tmp將框1中的數字儲存起來,
然後計算翻轉後框1(top layer)中的數字;
再計算翻轉後框2(left layer)中的數字;
再依次計算框3,4中的數字,這樣就完成了最外圈的反轉。
最外圈翻轉之後的結果為:
接下來進行遞迴,對內層的圈進行相同的操作。
提交程式碼:
class Solution{
public void rotate(int[] [] matrix) {
for(int i=0;i<matrix.length/2;i++) {
rotateCircle(matrix,i,i,matrix.length-2*i);
}
}
public void rotateCircle(int[][] matrix,int r,int c,int size) {
if(size==2) {
int tmp=matrix[r][c];
matrix[r][c]=matrix[r+1][c];
matrix[r+1][c]=matrix[r+1][c+1];
matrix[r+1][c+ 1]=matrix[r][c+1];
matrix[r][c+1]=tmp;
return;
}
int tmp[]=new int[size];
for(int i=0;i<tmp.length;i++)
tmp[i]=matrix[r][r+i];
//update the upper layer
for(int i=0;i<size;i++)
matrix[r][r+size-1-i]=matrix[r+i][c];
//update the left layer
for(int i=1;i< size;i++)
matrix[r+i][c]=matrix[r+size-1][c+i];
//update the bottom layer
for(int i=1;i<size-1;i++)
matrix[r+size-1][c+i]=matrix[r+size-i-1][c+size-1];
matrix[r+size-1][c+size-1]=tmp[tmp.length-1];
//update the right layer
for(int i=1;i<size-1;i++) {
matrix[r+i][c+size-1]=tmp[i];
}
}
}
執行結果: