给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。
题目难度: 中等;
class Solution {
public:
void rotate(vector<vector<int>>& matrix) {
int n=matrix.size();
if(n==1) return; // 这里其实可以不做的,但是下面的转置数组必须得从0行开始了
int temp=0;
/* 上下翻转数组,因为可以将数组看作是按照行存储的,
上下翻转的效率要高于左右翻转;
*/
for(int i=0;i<n/2;++i){
matrix[i].swap(matrix[n-1-i]);
}
/* 转置数组:这里的swap交换的两个对象是上三角和下三角,
处理边界条件来避免对对角线元素来进行交换操作;
*/
for(int i=1;i<n;++i){
for(int j=0;j<i;++j){
swap(matrix[i][j],matrix[j][i]);
}
}
}
};
这里存在两个swap() 容器对象的成员函数的swap 支持对单个元素或者是两个相同类型的容器本身;
- 交换某个元素:
arr[i].swap(arr[j]);
此操作交换了索引 i 和索引 j 上的两个元素的值; - 交换两个容器对象:
arrA.swap(arrB);
此操作交换了两个容器对象; - STL 标准库当中的 模板方法 使用的时候可以传入两个变量或者容器首元素地址;