参考自会咬人的兔子
方法一:一步旋转
class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for(int i = 0; i < n / 2; i++){ for(int j = i; j < n - 1 - i; j++){ int tmp = matrix[i][j]; matrix[i][j] = matrix[n - 1 - j][i]; matrix[n - 1 - j][i] = matrix[n - 1 - i][n - 1 - j]; matrix[n - 1 - i][n - 1 - j] = matrix[j][n - 1 - i]; matrix[j][n - 1 - i] = tmp; } } } };
方法二:首先以从对角线为轴翻转,然后再以x轴中线上下翻转即可得到结果
class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for(int i = 0; i < n - 1; i++){//i只能取到 n - 2, 因为n - 1是对称轴 for(int j = 0; j < n - 1 - i; j++){//j只能取到n - 1 - i, 在对称轴的左边 swap(matrix[i][j], matrix[n - 1 - j][n - 1 - i]); } } for(int i = 0; i < n / 2; i++){//i只能取到横向中间轴的上面 for(int j = 0; j < n; j++){//j可以取到所有值 swap(matrix[i][j], matrix[n - 1 - i][j]);//按横向轴翻转,j不变;i变为n-1-i } } } };