1. 程式人生 > 其它 >C語言刷“矩陣”類題目(2維矩陣/2級指標)

C語言刷“矩陣”類題目(2維矩陣/2級指標)

566. 重塑矩陣

int** matrixReshape(int** mat, int matSize, int* matColSize, int r, int c, int* returnSize, int** returnColumnSizes)
{   
    // 條件不滿足,返回原矩陣
    if (r * c != matSize * (*matColSize)) {
        *returnSize = matSize;
        *returnColumnSizes = malloc(sizeof(int) * matSize);
        for (int
i = 0; i < matSize; i++) { (*returnColumnSizes)[i] = matColSize[i]; } return mat; } // 先把2維矩陣,轉成1維 int *arrayOne = malloc(sizeof(int) * r * c); for (int i = 0, count = 0; i < matSize; i++) { for (int j = 0; j < *matColSize; j++) { arrayOne[count
++] = mat[i][j]; } } // 再把1維轉成需要的2維矩陣 // 方法:int**本質就是指向int*的指標,讓它指向1維陣列的不用部位即可 int **res = malloc(sizeof(int*) * r); *returnSize = r; *returnColumnSizes = malloc(sizeof(int) * r); for (int i = 0; i < r; i++) { (*returnColumnSizes)[i] = c; // 開始換皮,把1維轉成最終的2維
res[i] = arrayOne + i*c; } return res; }