python 旋转图像
給定一個(gè) n × n 的二維矩陣 matrix 表示一個(gè)圖像。請(qǐng)你將圖像順時(shí)針旋轉(zhuǎn) 90 度。
你必須在 原地 旋轉(zhuǎn)圖像,這意味著你需要直接修改輸入的二維矩陣。請(qǐng)不要 使用另一個(gè)矩陣來旋轉(zhuǎn)圖像。
輸入:matrix = [[1,2,3],[4,5,6],[7,8,9]]
輸出:[[7,4,1],[8,5,2],[9,6,3]]
輸入: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]]
提供三種解題思路
1. 借助輔助數(shù)組,循環(huán)替換數(shù)據(jù)
class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""# 解題思路一# 借助輔助數(shù)組,循環(huán)替換數(shù)據(jù)import copycopy_matrix = copy.deepcopy(matrix)n = len(matrix)if n == 1:return matrixfor i in range(n):for j in range(n):matrix[i][j] = copy_matrix[n-j-1][i]return matrix2. 兩次翻轉(zhuǎn)達(dá)到旋轉(zhuǎn)的效果—>先沿左右中線翻轉(zhuǎn)(上下翻轉(zhuǎn)), 再沿-45度對(duì)角線翻轉(zhuǎn)
class Solution:def rotate(self, matrix: List[List[int]]) -> None:"""Do not return anything, modify matrix in-place instead."""# 解題思路二# 兩次翻轉(zhuǎn)解題 先沿左右中線翻轉(zhuǎn)(上下翻轉(zhuǎn)),再沿-45度對(duì)角線翻轉(zhuǎn)length = len(matrix)for j in range(length):for i in range(length//2):matrix[j][i], matrix[j][length-i-1] = matrix[j][length-i-1], matrix[j][i]n = length - 1m = nfor j in range(n):for i in range(m):matrix[j][i], matrix[n-i][n-j] = matrix[n-i][n-j], matrix[j][i]m -= 1return matrix3.標(biāo)準(zhǔn)的原地旋轉(zhuǎn)
解題思路是: 以左上,右上,右下, 左下 四個(gè)頂點(diǎn)為起始點(diǎn), 分別向右旋轉(zhuǎn),四個(gè)位置相互交換,交換結(jié)束后,左上橫坐標(biāo)加1,右上縱坐標(biāo)加1,右下橫坐標(biāo)減1,左下縱坐標(biāo)減1,依次類推,把最外層的數(shù)據(jù)全部旋轉(zhuǎn)。
接著跳轉(zhuǎn)到內(nèi)圈,還是上邊的旋轉(zhuǎn)邏輯,直到旋轉(zhuǎn)結(jié)束。
總結(jié)
以上是生活随笔為你收集整理的python 旋转图像的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 井字游戏
- 下一篇: python顺时针螺旋顺序