566. Reshape the Matrix的C++解法

xiaoxiao2021-02-27  134

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

转载请注明原文地址: https://www.6miu.com/read-17138.html

最新回复(0)