思路解析
如下图所例:
转换后变成
通过对比,我们可以得到如下规律:
- 原本是第i行的元素,变到了第 n - 1 - i列去了
- 原本为j列的元素,变到第 j 行去了
所以,核心思想为 ——> mat[i][j] --> mat[j][n - 1 - i];
代码实现
void rotate(int** matrix, int matrixSize, int* matrixColSize){ int matrix_new[matrixSize][matrixSize]; for(int i = 0;i < matrixSize;i++) { for(int j = 0;j < matrixSize;j++) matrix_new[i][j] = matrix[i][j]; } for(int i = 0;i < matrixSize;i++) for(int j = 0;j < matrixSize;j++) { matrix[j][matrixSize - i - 1] = matrix_new[i][j]; } }
补充思路
先进行上下对称翻转 然后沿对角线进行翻转
代码实现
void rotate(int** matrix, int matrixSize, int* matrixColSize){ int row = 0; int col = 0; int tmp = 0; // 对角线翻转 for (row = 0; row <= matrixSize - 1; row++) { for (col = row + 1; col <= *matrixColSize - 1; col++) { tmp = matrix[row][col]; matrix[row][col] = matrix[col][row]; matrix[col][row] = tmp; } } // 轴对称翻转 for (row = 0; row <= matrixSize - 1; row++) { for (col = 0; col <= (*matrixColSize - 1) / 2; col++) { tmp = matrix[row][col]; matrix[row][col] = matrix[row][*matrixColSize - 1 - col]; matrix[row][*matrixColSize - 1 - col] = tmp; } } }