64,199
社区成员
发帖
与我相关
我的任务
分享int **myMalloc(int r, int c, int* returnSize, int** returnColumnSizes) {
int i;
int **ret = (int **)malloc( sizeof(int *) * r );
*returnColumnSizes = (int *)malloc( sizeof(int) * r );
*returnSize = r;
for(i = 0; i < r; ++i) {
ret[i] = (int *)malloc( sizeof(int) * c );
(*returnColumnSizes)[i] = c;
}
return ret;
}
int** flipAndInvertImage(int** image, int imageSize, int* imageColSize, int* returnSize, int** returnColumnSizes){
int i, j;
int r = imageSize, c = imageColSize[0];
int **ret = myMalloc(r, c, returnSize, returnColumnSizes);
for(i = 0; i < r; ++i) {
for(j = 0; j < c; ++j) {
ret[i][j] = 1 - image[i][ c-1-j ];
}
}
return ret;
}

int** transpose(int** matrix, int matrixSize, int* matrixColSize, int* returnSize, int** returnColumnSizes) {
int m = matrixSize, n = matrixColSize[0];
int** transposed = malloc(sizeof(int*) * n);
*returnSize = n;
*returnColumnSizes = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
transposed[i] = malloc(sizeof(int) * m);
(*returnColumnSizes)[i] = m;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
transposed[j][i] = matrix[i][j];
}
}
return transposed;
}

int** matrixReshape(int** nums, int numsSize, int* numsColSize, int r, int c, int* returnSize, int** returnColumnSizes) {
int m = numsSize;
int n = numsColSize[0];
if (m * n != r * c) {
*returnSize = numsSize;
*returnColumnSizes = numsColSize;
return nums;
}
*returnSize = r;
*returnColumnSizes = malloc(sizeof(int) * r);
int** ans = malloc(sizeof(int*) * r);
for (int i = 0; i < r; i++) {
(*returnColumnSizes)[i] = c;
ans[i] = malloc(sizeof(int) * c);
}
for (int x = 0; x < m * n; ++x) {
ans[x / c][x % c] = nums[x / n][x % n];
}
return ans;
}

int** construct2DArray(int* original, int originalSize, int m, int n, int* returnSize, int** returnColumnSizes){
if (originalSize != m * n) {
*returnSize = 0;
return NULL;
}
int ** ans = (int **)malloc(sizeof(int *) * m);
*returnColumnSizes = (int *)malloc(sizeof(int) * m);
for (int i = 0; i < m; ++i) {
ans[i] = (int *)malloc(sizeof(int) * n);
(*returnColumnSizes)[i] = n;
}
for (int i = 0; i < originalSize; i += n) {
memcpy(ans[i / n], original + i, sizeof(int) * n);
}
*returnSize = m;
return ans;
}
