牛客网-每日一练
# # # @param matrix int整型二维数组 # @return void # class Solution: def rotate(self , matrix ): count = len(matrix) if count == 1: return matrix for i in range(count): for j in range(i , count): matrix[j][i],matrix[i][j]=matrix[i][j],matrix[j][i] for i in range(count): matrix[i] = matrix[i][::-1] return matrix # write code here
给出一个用二维矩阵表示的图像
返回该图像顺时针旋转90度的结果
扩展:
你能使用原地算法解决这个问题么
题解:首先,我们先来了解一下什么是原地算法。很简单的说就是不用考虑超出的空间,然后去覆盖。
此题是一个非常典型的数组题
这一问题可以有如下问法(都是空间复杂度为常数级别):
- 矩阵左旋/右旋90度
- 矩阵左旋/右旋180度
对于本题,有两种思路:
思路一:利用对称进行旋转——先根据主对角线互换元素,再根据垂直中线互换元素(推荐使用这种方法)
如果旋转的是90°那么先根据主对角线互换元素,再根据垂直中线互换元素,如果是180°,那么进行两次对角线互换元素即可
思路二:利用坐标映射(不推荐)
举一反三:面对旋转、填充一类的题型,一定要考虑对称这一“大杀器”,它能极大的减少工作量,提高解题正确率和解题效率