一. 问题描述
image.pngExample1
Input:
nums =
[[1,2],
[3,4]]
r = 1, c = 4
Output:
[[1,2,3,4]]
Explanation:
The row-traversing of nums is [1,2,3,4]. The new reshaped matrix is a 1 * 4 matrix, fill it row by row by using the previous list.
Example2
Input:
nums =
[[1,2],
[3,4]]
r = 2, c = 4
Output:
[[1,2],
[3,4]]
Explanation:
There is no way to reshape a 2 * 2 matrix to a 2 * 4 matrix. So output the original matrix.
二.问题解决
首先考虑元素个数够不够要求的矩阵元素的个数,
然后再考虑进行将元素进行格式的转化。
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(nums.size() == 0) {
return nums;
}else if(m*n != r*c){
return nums;
}else{
vector<vector <int> > ivec(r ,vector<int>(c));
for(int i=0;i<m*n;i++){
int x = i/n;
int y = i%n;
int new_x = i/c;
int new_y = i%c;
ivec[new_x][new_y]= nums[x][y];
}
return ivec;
}
}
};
值得注意的点在于二维数组的声明和使用,
vector<vector <int> > ivec(r ,vector<int>(c));
ivec[new_x][new_y]= nums[x][y];
本来想通过for循环将二维的数组通过vector的insert方法转成一维的数组,然后再将一维的数组变成二维的数组来着,但是时间不符合题目要求,后来参考网上代码,得到现在的这个比较巧妙的方法。值得学习。
以后涉及到数组转换的时候要主动的去考虑是不是可以通过取余和整除两个操作来实现变化。
以上,继续加油啦~
网友评论