1、矩阵旋转对称通解
考虑到这实际上是一个矩阵的旋转对称问题,我们可以整理出矩阵对称的规律,通过多次对称实现旋转的效果。具体对称规律如下:
上下对称:matrix[i][j] -> matrix[n-i-1][j],(列不变)
左右对称:matrix[i][j] -> matrix[i][n-j-1],(行不变)
主对角线对称:matrix[i][j] -> matrix[j][i],(行列互换)
副对角线对称:matrix[i][j] -> matrix[n-j-1][n-i-1] (行列均变,且互换)
题目要求我们对矩阵顺时针旋转90度,因此元素之间存在如下的转化规律:matrix[i][j] -> matrix[j][n-i-1]。为了实现这样的转化,我们可以通过两种对称的方法加以实现:1、主对角线对称 + 左右对称;2、上下对称 + 主对角线对称。最终代码如下:
class Solution {
public:
void swap(vector<vector<int>> &matrix, int i, int j, int m, int n) {
int temp = matrix[i][j];
matrix[i][j] = matrix[m][n];
matrix[m]