-
解题思路:要有宏观的思路,策略是一圈一圈的转换。然后每一圈,又分成一个一个的小组进行转换,见下图
-
代码
class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for (int i = 0; i <= (n - 1) / 2; ++i) { // 一圈一圈处理 int begin_a = i; // 该圈的左上角点的行 int begin_b = i; // 该圈的左上角点的列 int end_a = n - 1 - i; // 该圈的右下角点的行 int end_b = n - 1 - i; // 该圈的右下角点的列 for (int g = 0; g < end_a - begin_a; ++g) { // 这么多组 // 第一个点 int one_a = begin_a; int one_b = begin_b + g; // 第二个点 int two_a = begin_a + g; int two_b = end_b; // 第三个点 int three_a = end_a; int three_b = end_a - g; // 第四个点 int four_a = end_a - g; int four_b = begin_b; // 第一个点给到第二个点 int tmp1 = matrix[two_a][two_b]; matrix[two_a][two_b] = matrix[one_a][one_b]; // 第二个点给到第三个点 int tmp2 = matrix[three_a][three_b]; matrix[three_a][three_b] = tmp1; // 第三个点给到第四个点 tmp1 = matrix[four_a][four_b]; matrix[four_a][four_b] = tmp2; // 第四个点给到第一个点 matrix[one_a][one_b] = tmp1; } } } };