思路就是新建一个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; } };