1. 程式人生 > >【leetcode】48.(Medium)Rotate Image

【leetcode】48.(Medium)Rotate Image

題目連結


解題思路:
首先如果二維陣列是11或者22,直接蠻力計算;
如果是22以上,可以一圈一圈(rotate circle)地計算反轉90度之後的結果。
比如,對於下面5
5的陣列:
在這裡插入圖片描述
首先設定一個數組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]; } } }

執行結果:
在這裡插入圖片描述