给你一个下标从 0 开始的一维整数数组 original 和两个整数 m 和 n 。你需要使用 original 中 所有 元素创建一个 m 行 n 列的二维数组。
original 中下标从 0 到 n - 1 (都 包含 )的元素构成二维数组的第一行,下标从 n 到 2 * n - 1 (都 包含 )的元素构成二维数组的第二行,依此类推。
请你根据上述过程返回一个 m x n 的二维数组。如果无法构成这样的二维数组,请你返回一个空的二维数组。
来源:力扣(LeetCode)
模拟
/**
* Return an array of arrays of size *returnSize.
* The sizes of the arrays are returned as *returnColumnSizes array.
* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
*/
int
** construct2DArray(int* original, int originalSize, int m, int n, int* returnSize, int** returnColumnSizes)
{
int row = m, column = n;
// 先将 returnSize 赋值, 否则会报错 "load of null pointer of type 'int *"
*returnSize = 0;
if (row * column != originalSize)
{
return NULL;
}
// 注意题目要求 malloc 进行分配内存
int **ans = (int **)malloc(sizeof (int *) * row);
*returnColumnSizes = (int *)malloc (sizeof (int) * row);
for (int j = 0; j < row; j ++)
{
ans[j] = (int *)malloc (sizeof (int) * column);
for (int k = 0; k < column; k ++)
{
ans[j][k] = original[j * column + k];
}
(*returnColumnSizes)[j] = column;
}
*returnSize = row;
return ans;
}