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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章