如果不出意外每天会写一道算法题的博客。如果题目简单,就一天发布一道。如果题目比较难。我会2~3天发一道算法的题目。今天写的这道题目比较简单。题目如下:
解法我是用C++写的。我的解法的大致想法是:先把需要转换的矩阵直接转换成一维的数组,然后再根据要求把一维中的元素全部截为以c个元素为一组的vector,一共有r个vector,再把这r个vector存放到vector<vector<int>> reshaped中。
vector<vector<int>> matrixReshape(vector<vector<int>> nums, int r, int c) {
int elemNum=0; //elemNum用来计算出所给的矩阵元素的个数
vector<vector<int>> reshaped;//用来存储reshape之后的矩阵
vector<vector<int>>::iterator iter;//访问nums矩阵的迭代器
vector<int> tempMatrix,tempVec;//tempMatrix是将多维的矩阵直接转化一维的矩阵;tempVec是存储reshaped矩阵的元素(reshaped是以每一行作为元素的,列数作为元素的个数)
vector<int>::size_type ix;
vector<int>::size_type iy;
for(iter=nums.begin();iter!=nums.end();++iter)
{
elemNum+=(*iter).size(); //求出矩阵的全部元素的个数
for(vector<int>::size_type num=0;num!=(*iter).size();num++)
{
tempMatrix.push_back((*iter)[num]);//把所给的矩阵直接转化为一维的矩阵
}
}
if(r*c==elemNum&&r<=100&&c<=100&&r>0&&c>0)//转换之后的行列的乘积应该和矩阵的全部的元素个数相同并且r和c的取值大于0小于100
{
for(ix=0;ix<r;++ix)
{
for(iy=0;iy<c;++iy)
{
tempVec.push_back(tempMatrix[ix*c+iy]);//把tempMatrix分为c个元素一组,一共有r组,存到tempVec中
}
reshaped.push_back(tempVec);
tempVec.erase(tempVec.begin(),tempVec.end());//每次存放之后都把tempVec清空,准备存放下一个
}
return reshaped;
}
else
{
return nums;
}
}