Reshape the Matrix

#代码

想法一:在二维数组中,他的地址是有序、处于同一个内存空间的,{{1,2},{3,4}},在地址中表示相当与{1,2,3,4}。原想以这种方式来解决vector的重塑矩阵问题。

但是在vector中,每一个新的vector都会动态的分配一个空间,所以前一个vector和后一个vector不可能会在一个内存空间中。想法1宣告失败。只能将vector中的值赋予数组中,再进行操作。

        //基于想法一的实现
        vector<vector<int>> matrixReshape(vector<vector<int>> &nums, int r, int c) {
        //判断是否相等,否返回nums
        const int row = nums.size();
        const int count = (*nums.begin()).size();
        if ((r * c) != (row * count))
            return nums;
        cout<<row<<count;

        int numArray[row][count];
        int *p=&numArray[0][0];
        //将vector中的数据填充到数组中
        for (auto it = nums.begin(); it != nums.end(); it++) {
            for (auto iter = (*it).begin(); iter != (*it).end(); iter++) {
                *p=*iter;
                p++;
            }
        }

        //将数组中的数据反填到新的vector中
        vector<vector<int>> numsRow{};
        int *z=&numArray[0][0];
        for (int i=0;i<r;i++) {
            vector<int> numsCout(z,z+c);
            numsRow.push_back(numsCout);
            z+=c;
        }
        return numsRow;
    }

猜你喜欢

转载自blog.csdn.net/qq_31336891/article/details/78511988
今日推荐