矩阵
👌1. 螺旋矩阵
代码实现:
/* * @param matrix int整型二维数组 * @param matrixRowLen int matrix数组行数 * @param matrixColLen int* matrix数组列数 * @return int整型一维数组 * @return int* returnSize 返回数组行数 */ int* spiralOrder(int **matrix, int matrixRowLen, int *matrixColLen, int *returnSize) { int s = 0, x = matrixRowLen - 1, z = 0, y = *matrixColLen - 1; // s = 上, x = 下, z = 左, y = 右 int len = matrixRowLen * *matrixColLen; int *arr = (int*)malloc(sizeof(int) * len); int count = 0; while (1) { for (int i = z; i <= y; i++) { // 从左到右 arr[count++] = matrix[s][i]; } if (count == len) { break; } for (int i = s + 1; i <= x; i++) { // 从上到下 arr[count++] = matrix[i][y]; } if (count == len) { break; } for (int i = y - 1; i >= z; i--) { // 从右到左 arr[count++] = matrix[x][i]; } if (count == len) { break; } for (int i = x - 1; i > s; i--) { // 从下到上 arr[count++] = matrix[i][z]; } if (count == len) { break; } s++; x--; z++; y--; } *returnSize = len; return arr; }
👌2. 生命游戏
代码实现:
int dir[8][2] = { {-1, -1}, {-1, 0}, {-1, 1}, {0, -1}, {0, 1}, {1, -1}, {1, 0}, {1, 1} }; int getLifeCellNum(int **board, int boardSize, int *boardColSize, int m, int n) { int result = 0; for (int i = 0; i < 8; i++) { int x = m + dir[i][0]; int y = n + dir[i][1]; if ((x >= 0) && (x < boardSize) && (y >= 0) && (y < boardColSize[x])) { if (board[x][y] == 1) { result++; } } } return result; } void gameOfLife(int **board, int boardSize, int *boardColSize) { int i, j; if ((board == NULL) || (boardSize == 0) || (boardColSize == NULL)) { return; } int **tmp = (int**)malloc(sizeof(int *) * boardSize); for (i = 0; i < boardSize; i++) { tmp[i] = (int*)malloc(sizeof(int) * boardColSize[i]); } for (i = 0; i < boardSize; i++) { for (j = 0; j < boardColSize[i]; j++) { tmp[i][j] = getLifeCellNum(board, boardSize, boardColSize, i, j); } } for (i = 0; i < boardSize; i++) { for (j = 0; j < boardColSize[i]; j++) { if (board[i][j]) { if ((tmp[i][j] != 2) && (tmp[i][j] != 3)) { board[i][j] = 0; } } else { if (tmp[i][j] == 3) { board[i][j] = 1; } } } } for (i = 0; i < boardSize; i++) { free(tmp[i]); }