給你一幅由 n × n 矩陣表示的影象,其中每個畫素的大小為 4 位元組。請你設計一種演算法,將影象旋轉 90 度。
不占用額外記憶體空間能否做到?
示例
#給定 matrix = [[
1,2,
3],[
4,5,
6],[
7,8,
9]],
#原地旋轉輸入矩陣,使其變為:[[
7,4,
1],[
8,5,
2],[
9,6,
3]]
從題意上解析,該題是需要將原二維陣列的行轉化為列,第一行的元素轉化為最後一列,最後一行的元素轉化為第一列,中間的行以此類推。
1,使用額外的記憶體空間
使用額外空間的情況比較容易考慮到,建立乙個空的二維陣列,然後從最後一行獲取二維陣列的元素,並將獲取到的元素按順序寫入新建立的二維陣列的第一列,之後的以此類推直到所有行都被處理完成。
class
solution
(object):
defrotate
(self, matrix)
:"""
:type matrix: list[list[int]]
:rtype: none do not return anything, modify matrix in-place instead.
"""matrix_len =
len(matrix)
new_matrix =[[
]for i in
range
(matrix_len)
]for i in
range
(len
(matrix)):
row = matrix[matrix_len-
1-i]
for j in
range
(len
(row)):
new_matrix[j]
)return new_matrix
2,不使用額外的空間
上面的使用額外空間的方法時間複雜度為o(n²),時間複雜度比較高。接下來可以稍微優化一下,同時也不需要使用額外的記憶體空間。
在矩陣的操作中,根據對角線翻轉可以將原矩陣的行轉化為列,這就初步達到我們的目的了。轉化之後的矩陣的第一列是原矩陣的第一行,最後一列是原矩陣的最後一行。因此在對轉化之後的矩陣的每一行進行倒序排列即可得到所需的結果。
class
solution
(object):
defrotate
(self, matrix)
:"""
:type matrix: list[list[int]]
:rtype: none do not return anything, modify matrix in-place instead.
"""n =
len(matrix)
# 使用對角線翻轉將行轉化為列
for i in
range
(n-1):
for j in
range
(i+1
, n)
: temp = matrix[i]
[j] matrix[i]
[j]= matrix[j]
[i] matrix[j]
[i]= temp
# 使用切片的功能將每行的元素倒序排
for i in
range
(n):
matrix[i]
= matrix[i][:
:-1]
return matrix
上面的演算法執行效率還是不太高,後面繼續改進
旋轉矩陣演算法
question 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 void func int n 要求 通過傳入的n,輸出乙個4 4的矩陣,順序如上圖所示.code nxn矩陣 include using namespace std include define max...
旋轉矩陣的演算法
旋轉矩陣是計算機圖形學裡面的基礎內容。之前我還寫過一篇計算機圖形學基礎知識的總結 操作的步驟可以分為兩部,一是沿正對角線對稱,二是沿水平對稱軸對稱 原圖 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 第一步之後 1 5 9 13 2 6 10 14 3 7 11 15...
python旋轉 Python實現旋轉矩陣
要求 給乙個n n的陣列,旋轉90度。手動畫個醜圖 image.png 簡單思路 順時針 如圖四個紅框為乙個layer,每次旋轉乙個layer,layer的範圍是 0,len nums 2 在第乙個layer迴圈中,要將四角的元素按一下順序旋轉 0,0 轉到 0,3 轉到 3,3 轉到 3,0 轉到...