思路就是新建一个vector数组把旧的数组里的内容一个一个填进去。
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
if (nums[0].size()*nums.size() < r*c) return nums;
else
{
int h = nums.size();
int w = nums[0].size();
vector<vector<int>> result(r, vector<int>(c));
for (int i = 0; i < r; i++)
{
for (int j = 0; j < c; j++)
{
int temp = i*c+j;
int th = temp / w;
int tw = temp % w;
result[i][j] = nums[th][tw];
}
}
return result;
}
}
};
既然原数组的下标可以用取商和取余的方法求,其实新生成的数组也可以,所以只需要一个循环就可以了,不过时间复杂度好像没啥区别。
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size(), n = nums[0].size(), o = m * n;
if (r * c != o) return nums;
vector<vector<int>> res(r, vector<int>(c, 0));
for (int i = 0; i < o; i++) res[i / c][i % c] = nums[i / n][i % n];
return res;
}
};