转置二维向量矩阵

Transpose a 2D vector matrix

有没有办法在不分配另一个二维向量的情况下找到二维向量矩阵的转置?

示例测试用例

Input: matrix = [[1,2,3],[4,5,6],[7,8,9]]
Output: [[1,4,7],[2,5,8],[3,6,9]]

我试过的代码

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int i,j, n=matrix.size(),temp;
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                temp=matrix[i][j];
                matrix[i][j]=matrix[j][i];
                matrix[j][i]=temp;
            }
        }
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
        }
    }
};

打印输出:

1 2 3 
4 5 6 
7 8 9 

预期输出:

1 4 7
2 5 9
3 6 9 

已编辑:

新代码:

class Solution {
public:
    void transpose(vector<vector<int>>& mat, int n) {
        int i,j,temp;
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                temp=mat[i][j];
                mat[i][j]=mat[j][i];
                mat[j][i]=temp;
            }
        }
    }
    void rotate(vector<vector<int>>& matrix) {
        int n=matrix.size(),i,j;
        transpose(matrix, n);
        for(i=0; i<n; i++) {
            for(j=0; j<n; j++) {
                cout<<matrix[i][j]<<" ";
            }
            cout<<endl;
        }
    }
};

提前致谢

下面是 inplace(Fixed space) 的代码 || n*n 矩阵

class Solution {
public:
    void rotate(vector<vector<int>>& matrix) {
        int i,j,n=matrix.size();
        for(i=0; i<n; i++) {
            // Instead of j starting with 0 every time, its needs to start from i+1
            for(j=i+1; j<n; j++) {
                swap(matrix[i][j], matrix[j][i]);
            }
        }
        for(int i=0; i<n;i++) {
            reverse(matrix[i].begin(), matrix[i].end());
        }
    }
};