This is a math trick.
1 class Solution { 2 public: 3 void rotate(vector<vector<int> > &matrix) { 4 auto swap = [](int &a, int &b){int t = a; a = b; b = t;}; 5 if (matrix.size() == 0) return; 6 int n = matrix.size(); 7 for (int i = 0; i < n; i++) { 8 for (int j = i; j < n; j++) { 9 swap(matrix[i][j], matrix[j][i]); 10 } 11 } 12 for (int i = 0; i < n; i++) { 13 for (int j = 0; j < n/2; j++) { 14 swap(matrix[i][j], matrix[i][n-j-1]); 15 } 16 } 17 } 18 };