leetcode 48 旋转图像
旋转图像,想到的方法是以每一圈为单位,进行圈上的元素的旋转,完成每一个圈的旋转之后,就完成了整体的旋转,思路不困难,难度在于旋转时变量下标的确定,刚开始走了很多弯路,后来发现一定要把具体的数值写出来,找到不变的量,使其清晰起来,就会好搞很多,贴代码
class Solution { public: void rotate(vector<vector<int>>& matrix) { int n = matrix.size(); for(int i = 0 ; i < n/2 ; i++) //以圈为单位进行循环 { int l = n-2*i; for(int j = 0 ; j < l-1 ; j++) { int temp = matrix[i][i+j]; matrix[i][i+j] = matrix[i+l-1-j][i]; matrix[i+l-1-j][i] = matrix[i+l-1][i+l-1-j]; matrix[i+l-1][i+l-1-j] = matrix[i+j][i+l-1]; matrix[i+j][i+l-1] = temp; } } } };
还有一种比较巧妙的方法则是使用两次翻转来实现旋转,第一次是以水平线的上下翻转,第二次是以主对角线翻转,完成翻转后,就完成了旋转,贴代码

浙公网安备 33010602011771号