566.重塑矩阵

题目:[https://leetcode-cn.com/problems/reshape-the-matrix/description/]
思路:给定一个矩阵,判定能否转换成指定row行col列的矩阵。首先判定是否能转换成新的矩阵,即:原矩阵的元素总数(row*col)是否等于新的矩阵。如果能,就逐排填充,组成新的矩阵。
代码:

class Solution {
public:
    vector<vector<int>> matrixReshape(vector<vector<int>>& nums, int r, int c) {
        if (r*c!=nums[0].size()*nums.size()) {//判断是否能够重塑矩阵
            return nums;
        }
        vector<int> row;//初始化重塑矩阵的行
        vector<vector<int>> ans;
        int r_S=0;//新矩阵的行r_S的计数器,最大值为c-1,用以逐排构成元素
        for (auto &i:nums) {//遍历原容器
            for (int &j:i) {
                row.push_back(j);//逐排构成新的矩阵
                ++r_S;
                if (r_S==c) {//新矩阵是否填满,
                    r_S=0;//填满计数器置零
                    ans.push_back(row);
                    row.clear();//清空当前行
                }
            }
        }
        return ans;
    }
};

讨论区[https://leetcode.com/problems/reshape-the-matrix/solution/]
反思:1、对于一个R行C列矩阵,每行(r)最大有C个元素,每列(c)最大有R个元素

posted @ 2018-09-16 00:14  Kipper  阅读(132)  评论(0)    收藏  举报