//! n^2,1 -> 第一次翻转耗时n^2/2,第二次翻转耗时 n*n/2;原地算法 classSolution { public: voidrotate(vector<vector<int>> &matrix){ // 第一次绕主对角线翻转 for (int i = 0; i < matrix.size(); ++i) { for (int j = i + 1; j < matrix.size(); ++j) { swap(matrix[i][j], matrix[j][i]); } }
// 第二次绕中间的竖线翻转 for (int i = 0; i < matrix.size(); ++i) { int left = 0, right = matrix.size() - 1; while (left < right) { swap(matrix[i][left++], matrix[i][right--]); } } return; } };