Leetcode 每日一道

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



發佈了38 篇原創文章 · 獲贊 10 · 訪問量 9134
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章