重在参与,两版答案,一版简单一版快:
void print2DArray(int** grid, int gridSize, int* gridColSize);
/**
* 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** shiftGrid(int** grid, int gridSize, int* gridColSize, int k, int* returnSize, int** returnColumnSizes) {
int** returnGrid = malloc(gridSize * sizeof(int*));
for(int i = 0; i < gridSize; i++) returnGrid[i] = malloc(*gridColSize * sizeof(int));
int rotateLen = k % (gridSize * *gridColSize);
// printf("gridColSize: %d\n", *gridColSize);
if(rotateLen != 0){
int pivot = gridSize * *gridColSize - rotateLen;
// printf("rotatelen: %d; pivot: %d; \n", rotateLen, pivot);
// two parts: left part and right part;
for(int i = 0; i < gridSize * *gridColSize; i++){
if(i + pivot < gridSize * *gridColSize){
// starting, now copy from the pivot point to i
int pos = pivot + i;
// int temp = grid[pos / *gridColSize][pos % *gridColSize];
returnGrid[i / *gridColSize][i % *gridColSize] = grid[pos / *gridColSize][pos % *gridColSize];
// grid[i / *gridColSize][i % *gridColSize] = temp;
// printf("Once\n");
}else{
int pos = i - rotateLen;
// printf("Pos:%d\n", pos);
// int temp = grid[pos / *gridColSize][pos % *gridColSize];
returnGrid[i / *gridColSize][i % *gridColSize] = grid[ pos/ *gridColSize][pos % *gridColSize];
// grid[i / *gridColSize][i % *gridColSize] = temp;
}
// print2DArray(returnGrid, gridSize, gridColSize);
}
}else{
for(int i = 0; i < gridSize; i++) memcpy(returnGrid[i], grid[i], *gridColSize * sizeof(int));
}
// for(int i = 0; i < mvTimes; i++){
// for(int j = gridSize * *gridColSize - 1; j > 0; j--){
// int prev = (j - 1);
// // if (prev == -1) prev = (gridSize * *gridColSize - 1);
// int thisV = grid[prev / *gridColSize][prev % *gridColSize];
// grid[prev / *gridColSize][prev % *gridColSize] = grid[j / *gridColSize][j % *gridColSize];
// grid[j / *gridColSize][j % *gridColSize] = thisV;
// }
// }
// for(int i = 0; i < gridSize; i++) memcpy(returnGrid[i], grid[i], *gridColSize * sizeof(int));
*returnSize = gridSize;
*returnColumnSizes = gridColSize;
return returnGrid;
}
// Print a 2D int array where each row can have a different length
void print2DArray(int** grid, int gridSize, int* gridColSize) {
printf("[");
for (int i = 0; i < gridSize; i++) {
printf("[");
for (int j = 0; j < gridColSize[i]; j++) {
printf("%d", grid[i][j]);
if (j != gridColSize[i] - 1) printf(",");
}
printf("]");
if (i != gridSize - 1) printf(",");
}
printf("]\n");
}
不得不说 AI 写代码写多了之后做这种蚊子题都吃力,感觉非常悲催 