先把代码贴上来。
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
if (nums.size()*nums[0].size() != r*c) {
return nums;
}
vector<vector<int> > num(r);
int rl=0, cl=0;
for (int i = 0; i < nums.size(); ++i) {
for (int j = 0; j < nums[0].size(); ++j) {
if (cl < c) {
num[rl].push_back(nums[i][j]);
cl++;
} else {
cl = 0;rl++;
num[rl].push_back(nums[i][j]);
cl++;
}
}
}
return num;
}
};
思路很朴素,首先判断能不能转换,不能转换的话,就直接结束了。
能转换的话就是首先申请一个r维向量。开始还有些想当然,没申请就用,然后测试的时候就越界了。
我还申请了两个 int 变量去记录当前转换到哪一行哪一列了。接下来就一路遍历挨个转换。
很开心,用时击败了 95.43% 的 C++ 提交。只不过,开始的时候,我感觉我可以写出中等题,后来放弃了,我还是先简单题吧。
网友评论