48. 旋转图像 - 力扣(LeetCode) (leetcode-cn.com)
思路解析
如下图所例:
\begin{bmatrix}1 & 2 &3&\\4& 5&6\\7 &8&9\end{bmatrix}转换后变成
通过对比,我们可以得到如下规律:
- 原本是第i行的元素,变到了第 n - 1 - i列去了
- 原本为j列的元素,变到第 j 行去了
所以,核心思想为 ——> mat[i][j] --> mat[j][n - 1 - i];
代码实现
voidrotate(int** matrix, intmatrixSize, int* matrixColSize){ intmatrix_new[matrixSize][matrixSize]; for(inti = 0;i < matrixSize;i++) { for(intj = 0;j < matrixSize;j++) matrix_new[i][j] = matrix[i][j]; } for(inti = 0;i < matrixSize;i++) for(intj = 0;j < matrixSize;j++) { matrix[j][matrixSize-i-1] = matrix_new[i][j]; } }
补充思路
\begin{bmatrix} 1 & 2 &3 \\ 4& 5 &6 \\ 7&8 &9 \end{bmatrix} 先进行上下对称翻转 然后沿对角线进行翻转
代码实现
voidrotate(int** matrix, intmatrixSize, int* matrixColSize){ introw = 0; intcol = 0; inttmp = 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; } } }