思路
剥洋葱一样的过程可以实现原位替换,只要一个最大为n的暂存数组就行了。
0, 1, 2, 3 4, 5, 6, 7 8, 9, A, B C, D, E, F
这么个矩阵,首先从最外面一圈剥起,将[0,1,2]记录下来,然后替换为[C,8,4];然后顺时针继续,将[3,7,B]记录下来,然后用刚才记住的[0,1,2]替换…
代码
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int floor = 0;
int ceiling = matrix.size() - 1;
if(ceiling < 0)
return; //empty
vector<int> temp;
while(floor < ceiling){
//up
for(int col=floor; col<ceiling; col++){
temp.push_back(matrix[floor][col]); //remember current
matrix[floor][col] = matrix[ceiling-(col-floor)][floor]; //replace with left column values
}
//right
for(int row=floor; row<ceiling; row++){
temp.push_back(matrix[row][ceiling]); //remember current
matrix[row][ceiling] = temp[0]; //replace
temp.erase(temp.begin());
}
//bottom
for(int col=ceiling; col>floor; col--){
temp.push_back(matrix[ceiling][col]);
matrix[ceiling][col] = temp[0];
temp.erase(temp.begin());
}
//left
for(int row=ceiling; row>floor; row--){
matrix[row][floor] = temp[0];
temp.erase(temp.begin());
}
floor++;
ceiling--;
}
}
};