题目:把m*n的矩阵A放在r*c矩阵放在r*c的矩阵B中。若m*n!=r*c,则返回矩阵A,否则返回矩阵B
要求:输入矩阵A,和B矩阵的行r与列c
例如:nums=[[1,2],[3,4]] r=1,c=4 输出矩阵为[[1,2,3,4]]
nums=[[1,2],[3,4]] r=2,c=4 输出原始矩阵[[1,2],[3,4]]
思路:寻找原矩阵A和新矩阵B之间的关系,将原矩阵转化为一维矩阵,一维矩阵i的位置对应原矩阵第(i/n)行第(i%j)位置的元素,一维矩阵转化为新矩阵,一维矩阵i尾椎对应原矩阵第(i/c)行第(i%c)位置上的元素。所以原矩阵与新矩阵的关系为
A[i/n][i%n]=B[i/c][i%c]
C++代码:
Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
//计算矩阵中元素个数
int len = nums.size()*nums[0].size();
vector<vector<int>> n(r, vector<int>(c, 0));
if (len== r*c)
{
for (int i = 0; i <len; i++)
{
//建立原矩阵与新矩阵的关系
n[i / c][i%c] = nums[i / nums[0].size()][i%nums[0].size()];
}
return n;
}
else
return nums;
}
};