题目
给你一个下标从 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;
}
};