给定一个 n × n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。

    题目难度: 中等;

    1. class Solution {
    2. public:
    3. void rotate(vector<vector<int>>& matrix) {
    4. int n=matrix.size();
    5. if(n==1) return; // 这里其实可以不做的,但是下面的转置数组必须得从0行开始了
    6. int temp=0;
    7. /* 上下翻转数组,因为可以将数组看作是按照行存储的,
    8. 上下翻转的效率要高于左右翻转;
    9. */
    10. for(int i=0;i<n/2;++i){
    11. matrix[i].swap(matrix[n-1-i]);
    12. }
    13. /* 转置数组:这里的swap交换的两个对象是上三角和下三角,
    14. 处理边界条件来避免对对角线元素来进行交换操作;
    15. */
    16. for(int i=1;i<n;++i){
    17. for(int j=0;j<i;++j){
    18. swap(matrix[i][j],matrix[j][i]);
    19. }
    20. }
    21. }
    22. };

    这里存在两个swap() 容器对象的成员函数的swap 支持对单个元素或者是两个相同类型的容器本身;

    • 交换某个元素: arr[i].swap(arr[j]);此操作交换了索引 i 和索引 j 上的两个元素的值;
    • 交换两个容器对象: arrA.swap(arrB);此操作交换了两个容器对象;
    • STL 标准库当中的 模板方法 使用的时候可以传入两个变量或者容器首元素地址;