进行例题讲解
给定一个 n x n 的二进制矩阵 image ,先 水平 翻转图像,然后 反转 图像并返回 结果 。
水平翻转图片就是将图片的每一行都进行翻转,即逆序。
例如,水平翻转 [1,1,0] 的结果是 [0,1,1]。
反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。
例如,反转 [0,1,1] 的结果是 [1,0,0]
/** * 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** flipAndInvertImage(int** image, int imageSize, int* imageColSize, int* returnSize, int** returnColumnSizes){ int i, j, col; int **ret = (int **)malloc( sizeof(int *) * imageSize ); *returnColumnSizes = (int *)malloc( sizeof(int) * imageSize ); for(i = 0; i < imageSize; ++i) { col = imageColSize[i]; ret[i] = (int *)malloc( sizeof(int) * col ); (*returnColumnSizes)[i] = col; for(j = 0; j < col; ++j) { ret[i][j] = 1 - image[i][ col-1-j ]; } } *returnSize = imageSize; return ret; }
- (1) 利用
malloc
函数申请一个二维数组,第一维的长度为imageSize
,第二维则又是一个一维数组,所以类型为int *
,二维数组首地址为ret
;- (2) 为这个二维数组的第二维申请一个数组来记录它第二维的长度;
- (3)( 二维数组的第二维的长度为
flipAndInvertImage
函数传参进来的值,用临时变量col
进行存储;- (4)申请二维数组第二维的内存空间,并且第二维的长度为
col
;- (5) 二维数组的第二维的长度需要作为返回值返回,所以需要给
(*returnColumnSizes)
这个数组的每个元素进行赋值;- (6)按照题意进行水平翻转后取反;
- (7)
*returnSize
是需要返回的二维数组的第一维的长度;- (8) 返回二维数组首地址;
C语言的二维数组申请
于 2022-04-15 22:31:43 首次发布