题目:
给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像
样例:
给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]
思路:
- 思路一:先将矩阵转置,然后每一列的元素反转;(可画图理解)
- 思路二:找出每个元素旋转后的矩阵位置,即a[i] [j]==>a[j] [n-1-i]。
这种方法很容易在for循环的条件设置中出错,由于每次转换四个数a[n-1-j] [i],a[i] [j],a[j] [n-1-i],a[n-1-i] [n-1-j],对于每一次循环行数会从i,n-1-i收缩,所以i只要循环n/2次就好了;对于列数,从i开始,到n-1-i。
还有一处需要注意:a[i] [j] ==> a[j] [n-i-1]的数学表达式应该是a[j] [n-i-1] = a[i] [j]。
参考答案:
class Solution {
public:
/*
* @param matrix: a lists of integers
* @return:
*/
void rotate(vector<vector<int>> &matrix) {
// write your code here
/*思路一:先转置,再反转
int n= matrix.size();
for(int i=0 ;i<n; i++){
for(int j=i+1; j<n; j++){
swap(matrix[i][j],matrix[j][i]);
}
reverse(matrix[i].begin(), matrix[i].end());
}
}*/
//思路二:找出每个元素旋转后的矩阵位置
int n = matrix.size();
int temp;
//两个for循环的条件很重要!
for(int i=0; i<n/2; i++){
for(int j=i; j<n-1-i; j++){
temp = matrix[j][n-1-i];//需要注意
matrix[j][n-1-i] = matrix[i][j];//需要注意
matrix[i][j] = matrix[n-1-j][i] ;
matrix[n-1-j][i] = matrix[n-1-i][n-1-j];
matrix[n-1-i][n-1-j] = temp;
}
}
}
};
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。