1 、在第几个与行列位置之间的换算时,需要考虑怎样满足数组下标从0开始。
例如,第12个在3*4矩阵的第三行第四列,使用/
时12/4=3...0
,显然不满足数组要求。其应在[2][3]处,即11/4=2...3
。
2、vector<vector<int>> v(r, vector<int>(c, 0));
这种写法需要掌握
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size();
int n = nums[0].size();
if(m*n == r*c){
vector<vector<int>> Matrix(r);
for(int i = 0; i < r; i++){
Matrix[i].resize(c);
for(int j = 0; j < c; j++){
int tmp = i*c+j;
Matrix[i][j] = nums[tmp/n][tmp%n];
}
}
return Matrix;
}else
return nums;
}
};
然而,既然是确定位置,显然不需要这么麻烦
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
int m = nums.size();
int n = nums[0].size();
int count = m*n;
if(count == r*c){
vector<vector<int>> Matrix(r, vector<int>(c, 0));
for(int i = 0; i < count; i++){
Matrix[i/c][i%c] = nums[i/n][i%n];
}
return Matrix;
}else{
return nums;
}
}
};
岂不美哉?