Leetcode - 48. 旋转图像
给定一个
n × n的二维矩阵matrix表示一个图像。请你将图像顺时针旋转90度。
你必须在原地旋转图像,这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。
示例 1:

输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
输出:[[7,4,1],[8,5,2],[9,6,3]]
示例 2:

输入:matrix = [[5,1,9,11],[2,4,8,10],[13,3,6,7],[15,14,12,16]]
输出:[[15,13,2,5],[14,3,4,1],[12,6,8,9],[16,7,10,11]]
示例 3:
输入:matrix = [[1]]
输出:[[1]]
示例 4:
输入:matrix = [[1,2],[3,4]]
输出:[[3,1],[4,2]]
提示:
- matrix.length == n
- matrix[i].length == n
- 1 <= n <= 20
- -1000 <= matrix[i][j] <= 1000
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-image
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解1 2021/9/7 O(n2)
def rotate(matrix: list) -> None:
"""
Do not return anything, modify matrix in-place instead.
"""
'''
题目限制了nxn
0 1 2 3
matrix([0 [ 1, -2, 3, 4],
1 [ 0, 4, 5, 4],
2 [ 7, 8, -9, 4],
3 [-1, -2, -3, -4]])
有一定的规律
比如:
0,0 换到 0,3
0,3 -> 3,3
3,3 -> 3,0 //m[3][0]=m[3][3]
3,0 -> 0,0 //m[0][0]=m[3][0]
0,1 -> 1,3 //m[1][3]=m[0][1]
1,3 -> 3,2 //m[3][2]=m[1][3]
3,2 -> 2,0
2,0 -> 0,1
1,1 -> 1,2
1,2 -> 2,2
2,2 -> 2,1
2,1 -> 1,1
总结,
x,y -> y,len-1-x //m[y][len-1-x]=m[x][y],
从外面往里面一圈一圈的换
'''
n=matrix[0].__len__()
# 最外围是0,0开始,之后1,1,n=4,就到1为止,n=3,到0位置,n=5,到1为止,n=6,到2为止
# 总结,就是到n//2-1为止
i=0
end=n//2-1
while i<=end:
for x in range(i,n-1-i):
# 从i,x开始换,逆时针的换,少点中间变量的赋值
tmp=matrix[i][x]
# x,y逆时针下一个数是n-1-y,x
matrix[i][x]=matrix[n-1-x][i]
matrix[n-1-x][i]=matrix[n-1-i][n-1-x]
matrix[n-1-i][n-1-x]=matrix[x][n-1-i]
matrix[x][n-1-i]=tmp
i+=1
# print(matrix)
if __name__ == '__main__':
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
rotate(matrix)
matrix = [[5, 1, 9, 11], [2, 4, 8, 10], [13, 3, 6, 7], [15, 14, 12, 16]]
rotate(matrix)
matrix = [[1]]
rotate(matrix)
matrix = [[1, 2], [3, 4]]
rotate(matrix)


浙公网安备 33010602011771号