LeetCode

867. 转置矩阵

2018-11-18  本文已影响12人  闭门造折

给定一个矩阵 A, 返回 A 的转置矩阵。
矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引。

示例 1:

输入:[[1,2,3],[4,5,6],[7,8,9]]
输出:[[1,4,7],[2,5,8],[3,6,9]]

示例 2:

输入:[[1,2,3],[4,5,6]]
输出:[[1,4],[2,5],[3,6]]

提示:

1 <= A.length <= 1000
1 <= A[0].length <= 1000

思路

两个for循环嵌套
普通的矩阵遍历是

for(i in 行号){
    for(j in 列号){
        print A[i][j]
    }
}

我们需要得到转置结果,所以需要交换遍历顺序
即外层固定列号不变,通过行号改变得到不同行同一列的值

for(j in 列号){
    for(i in 行号){
        print A[i][j]
    }
}

性能分析

时间复杂度O(N^2),空间复杂度O(N)(新加行的时候需要额外一行用于存储)

具体代码

vector<vector<int>> transpose(vector<vector<int>>& A) {
    int rlen = A.size();  //行大小
    int clen = A[0].size(); //列大小
    vector<vector<int> > res; //结果集
    for(int i = 0; i < clen; i++){ //上方伪代码的实现
        vector<int> tmp;
        for(int j = 0; j < rlen; j++){
            tmp.push_back(A[j][i]);
        }
        res.push_back(tmp);
    }
    return res;
}
上一篇 下一篇

猜你喜欢

热点阅读