Given an image represented by an NxN matrix, where each pixel in the image is 4 bytes, write a method to rotate the image by 90 degrees. Can you do this in place?
分析:4個bytes告訴我們可以用整型來表示每個元素,關鍵是旋轉的過程。這道題目一開始我就理解錯了,感覺像素的旋轉不應該這麼簡單。但是,即使這樣旋轉的話,我也沒有什麼好的思路。參考了答案:
a、b、c分別替換了A、B、C。
我們使用層來進行旋轉操作,總共需要旋轉0~(n/2-1)層
void rotate(int **matrix, int n){
if(matrix==NULL||n<=0) return;
for(int layer=0;layer<n/2;layer++){
int first=layer;
int last=n-layer-1;//從右邊減去層數
for(int i=first;i<last;i++){
int sum=first+last;//因爲旋轉對應元素的行和列的和爲first+last
int tmp=matrix[first][i];
//left->top
matrix[first][i]=matrix[sum-i][first];
//bottom->left
matrix[sum-i][first]=matrix[last][sum-i];
//right->bottom
matrix[last][sum-i]=matrix[i][last];
//top->right
matrix[i][last]=tmp;
}
}
}
注:當將參數寫成char matrix[][]的時候會錯誤!
原因:因爲從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應爲多少行多 少列,不能只指定一維而不指定第二維,void Func(int array[3][])這種也是錯誤的。