目录
题目描述:
整体思路
首先要确保重塑后的矩阵内元素个数和原矩阵元素个数要相同,如果不同则原样返回原矩阵。
按行遍历顺序遍历原矩阵,设一个临时vector<int>存放新矩阵的每一行的元素,一边遍历一边判断临时vector的元素个数是否等于新矩阵每一行的元素个数,若相等,则说明新矩阵一行已完成,要读下一行,把临时vector元素清空同时新矩阵行数r要-1。若不相等,说明新矩阵的一行的元素还没读完,要继续往临时vector添加原矩阵元素。重复上述步骤知道新矩阵行数r=0。
具体代码
class Solution {
public:
vector<vector<int>> matrixReshape(vector<vector<int>>& mat, int r, int c) {
if(r*c!=mat.size()*mat[0].size()) return mat;
vector<vector<int>> v;
vector<int> v2;
for(int i=0;i<=mat.size()-1;i++){
for(int j=0;j<=mat[0].size()-1;j++){
if(r==0) break;
if(v2.size()==c){
v.push_back(v2);
v2=vector<int>();//清空临时矩阵
v2.push_back(mat[i][j]);//别忘了要往临时矩阵添加本次遍历到的原矩阵元素,弄,否则会漏
r--;
}else{
v2.push_back(mat[i][j]);
}
}
}
if(v2.size()==c){//特殊情况是r=0但是临时vector还未存入新矩阵,特殊处理
v.push_back(v2);
}
return v;
}
};