11 旋转图像-20200322
题目
给定一个 n × n 的二维矩阵表示一个图像。
将图像顺时针旋转 90 度。
示例
给定 matrix =
[
[1,2,3],
[4,5,6],
[7,8,9]
],
原地旋转输入矩阵,使其变为:
[
[7,4,1],
[8,5,2],
[9,6,3]
]
说明
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
注意事项
- 图像是一个方阵,长度为n。
- 必需在原地操作,不得新开辟数组,但是可以开辟常数个新空间。
思路一
将方阵分层处理,第一层是最外的一层,然后是里面的一层,逐级旋转。层数k={0,...,n/2},每层的索引范围是m=[k,n-k],每一层的旋转规律是 [k+i][ind], [ind][ind-i], [ind-i][k], [k][k+i] = [k][k+i], [k+i][ind], [ind][ind-i], [ind-i][k],其中i=range(k, n-2*k+1)。
修改经历:
1. 开始的逻辑没有找到,只找到第一层,第二层就出问题了。(第一次提交)
- 解答错误
2. 修改逻辑后,提交成功。(第二次提交)
- 执行用时 :32 ms, 在所有 Python3 提交中击败了92.72%的用户
- 内存消耗 :13.6 MB, 在所有 Python3 提交中击败了5.02%的用户
心得体会:
- 这个逻辑绕了半天,找了半天的行列关系,总是没对准。。。
最终代码展示:
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for k in range(0, int(n/2)):
ind = n - k - 1
for i in range(0, n-1-2*k):
matrix[k+i][ind], matrix[ind][ind-i], matrix[ind-i][k], matrix[k][k+i] = matrix[k][k+i], matrix[k+i][ind], matrix[ind][ind-i], matrix[ind-i][k]
思路二
题解大神的思路,转置然后旋转每一行。。。我跪了。。。
修改经历:
1. 一次就成了。(第一次提交)
心得体会:
生命不息,学习不止啊
最终代码展示:
class Solution:
def rotate(self, matrix: List[List[int]]) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
n = len(matrix)
for i in range(0, n):
for j in range(i, n):
matrix[i][j], matrix[j][i] = matrix[j][i], matrix[i][j]
for x in matrix:
x.reverse()