1.6

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][])這種也是錯誤的。

發佈了286 篇原創文章 · 獲贊 8 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章