如果不出意外每天會寫一道算法題的博客。如果題目簡單,就一天發佈一道。如果題目比較難。我會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;
}
}