C語言刷“矩陣”類題目(2維矩陣/2級指標)
阿新 • • 發佈:2021-10-21
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 (inti = 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; }