You are given an n x n 2D matrix representing an image.
Rotate the image by 90 degrees (clockwise).
Follow up:
Could you do this in-place?
此题要求矩阵顺时针转90度。可以找出元素选择规律:
i‘ = j;
j‘ = n-1-i;
i,j 位置的元素旋转后应该到i‘,j‘位置。
最基本的解法可以借助与一个副本matrix。如不不利用副本,可以将对位位置的四个元素一个一个的替换。具体请结合代码查看。
void rotate(vector<vector<int> > &matrix) { int n = matrix.size(); int low = 0,high = n-1,j = 0; while(low < high){ int tmpi,tmpj,value1,value2,tmp_i,tmp_j; for(int i = low ; i < high; i++){ //1 tmp_i = i; tmp_j = j; tmpi = tmp_j; tmpj = n-1-tmp_i; value1 = matrix[tmpi][tmpj]; matrix[tmpi][tmpj] =matrix[i][j]; //2 tmp_i = tmpi; tmp_j = tmpj; tmpi = tmp_j; tmpj = n-1-tmp_i; value2= value1; value1 = matrix[tmpi][tmpj]; matrix[tmpi][tmpj] =value2; //3 tmp_i = tmpi; tmp_j = tmpj; tmpi = tmp_j; tmpj = n-1-tmp_i; value2 = value1; value1 = matrix[tmpi][tmpj]; matrix[tmpi][tmpj] = value2; //4 tmp_i = tmpi; tmp_j = tmpj; tmpi = tmp_j; tmpj = n-1-tmp_i; value2 =value1; value1 = matrix[tmpi][tmpj]; matrix[tmpi][tmpj] = value2; } low++; high--; j++; } }
原文地址:http://blog.csdn.net/chenlei0630/article/details/41254997