题目

给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和  n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。

original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。

请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。

来源:力扣(LeetCode)


解答

双指针,一个标识二元数组的行,一个标记列,然后遍历赋值即可;

每次赋值后,列数+1,如果值满(即大于给定的列数n),就让列数置0,行数自增1即可。

同时,需要额外注意特殊情况,即给定的一元数组无法生成指定行列的二元数组,需要进行特殊判定。

代码如下:

class Solution {
public:
    vector<vector<int>> construct2DArray(vector<int>& original, int m, int n) {
        vector<vector<int>> ret(m, vector<int> (n, 0));

        int le = original.size();

        if (le != m * n) {
            return {};
        }

        int a = 0;
        int b = 0;

        for (int i = 0; i < le; ++i) {
            ret[a][b] = original[i];
            if (b + 1 == n) {
                b = 0;
                a++;
            } else {
                b++;
            }
        }

        return ret;

    }
};