给定一个矩阵A,返回A的转置矩阵
矩阵的转置是将矩阵的主对角线翻转,交换矩阵的行列
思想:把矩阵存入一个二维数组,不定大小,所以使用c++中的vector
class Solution {
public:
vector<vector<int>> transpose(vector<vector<int>>& A)
{
int m=A.size();//获取A矩阵的行数
int n=A[0].size();//获取列数
vector<vector<int>> B;//定义一个二维数组,来存储转置完的矩阵
int i;int j;
vector<int> vec(m);//定义一个临时的一位数组
for(i=0 ; i < n;i++)
{
vec.clear();//每次都将临时数组清空,存储下一个转置完的行
for(j=0;j<m;j++)
{
vec.push_back(A[j][i]);//这个ij的位置很重要 ,转置
}
B.push_back(vec);//将存储的转置之后的一维数组插入到二维数组
}
return B; //返回已转置的二维数组
}
};
for循环得到思路分析:
假设A是一个4*2的二维矩阵,此时m=4,n=2;
转置的话,需要先遍历左边的一列1,2,3,4,就是先遍历列,也就是说一列一列的遍历,这是for循环的第一层应该是列数n来控制;
接下来一列一列的进行,则需要一行一行向下走,此时需要执行m++向下走,所以第二层应该是m来控制;
因为i是控制n的列数,j是控制m的行数,所以A的下标应该是先行后列,即A[j][i]
这个顺序非常重要
接着把第一列已经转置完成的存入vec这个一位数组,此时变成了一行,插入到B二维矩阵中,直到遍历完成,
1 | 2 |
---|---|
2 | 3 |
3 | 4 |
4 | 5 |