原题地址:566. Reshape the Matrix。
解法一
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int len1 = nums.size();
int len2 = nums[0].size();
vector<vector<int>> res;
vector<int> line;
if (len1 * len2 == r * c) {
for (int i = 0; i < len1; i++) {
for (int j = 0; j < len2; j++) {
line.push_back(nums[i][j]);
}
}
for (int i = 0; i < r; i++) {
vector<int> temp;
for (int j = 0; j < c; j++) {
temp.push_back(line[i * c + j]);
}
res.push_back(temp);
}
}
else {
res = nums;
}
return res;
}
解法二
vector<vector<int>> matrixReshape2(vector<vector<int>>& nums, int r, int c) {
int len1 = nums.size();
int len2 = nums[0].size();
vector<vector<int>> res(r, vector<int>(c, 0));
if (len1 * len2 == r * c) {
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
int k = i * c + j;
res[i][j] = nums[k / len2][k % len2];
}
}
}
else {
res = nums;
}
return res;
}
参考:
[C++] Clean Code - 5 lines (2 Solution)
最后更新于2017年6月19日。