時計回り印刷マトリクスのpythonコード実装
12400 ワード
偶然xxxの中の1本の合格率のとても低い问题を発见して、本は小さく手を试して、どのように1日の奋闘を経て、ついにこの问题の合格率をまた少し下げました(50回もテストしたでしょう、耻ずかしい!耻ずかしい=.=!)、やっと合格した!简単に见える小问题は実はまだ少し穴があいているので、やはり记录してから参考にします!1、2、3、4、8、12、16、15、14、9、5、6、7、11、10の順に数字を印刷します.構想は以下の通りである:1、伝統的な構想は時計回りの状態の各要素のインデックス値を分析することであるが、インデックス値の変化が大きすぎて規則と明らかではないため、やはり構想を変える.マトリクスはpythonで2次元リストとして現れるため、リストの各サブリストはマトリクスの各行であることを想像すると、まずマトリクスの最初の行要素を読み出して新しいリストに追加し、それからこの行を削除することができ、残りのマトリクスは反時計回りに回転することができ、それから新しいマトリクスの最初の行を読み直してリストに入れることができ、このサイクルはマトリクスが空になるまで続く.2、それからもう一つの回転関数の実装です.元の行列とは反対の2次元リストを再構築し、新しい2ビットリストに元の行列の相関値を順番に追加する必要があります.具体的な実装はコードを参照してください.あまり話さないで、コードは以下の通りです!
ここで強調したいのはlstの構造で、多くのカーブを歩いた.
最後にテストコードを添付します.
結果
# -*- coding:utf-8 -*-
"""
Created on Thu Apr 23 16:09:45 2020
@author: ScramJet
"""
class Solution:
def printMatrix(self, matrix): #
ls = []
while matrix: # matrix ,
for k in matrix[0]:
# , ls
ls.append(k)
# ,
matrix.remove(matrix[0])
# rotate
matrix = self.rotate(matrix)
return ls # matrix ls
def rotate(self,matrix): #
if len(matrix) == 0:
return None
else:
# a
a = len(matrix[0])
# b
b = len(matrix)
# ( , )
lst = [[] for i in range(a)]
# 。。。。
for i in range(a):
for k in range(b):
# pop , ,
lst[i].append(matrix[k].pop())
return lst
ここで強調したいのはlstの構造で、多くのカーブを歩いた.
#1、 :
#lst = [[]*b]*a , b = 3,a = 2
lst = [[]*3]*2
print(lst)
>>>[[], []]
#
for i in range(3):
lst[0].append(1)
print (lst)
>>>[[1, 1, 1], [1, 1, 1]]
"""
# , ,
, lst = [[]*3]*2 ,
, ,
, 。
"""
#2、
lst = [[]for i in range(2)]
print(lst)
>>>[[], []]
#
for i in range(3):
lst[0].append(1)
print (lst)
>>>[[1, 1, 1], []] #
最後にテストコードを添付します.
if __name__ == '__main__':
matrix = [[1,2,3],[4,5,6],[7,8,9]]
solution = Solution()
result = solution.printMatrix(matrix)
print(result)
結果
[1, 2, 3, 6, 9, 8, 7, 4, 5]
交流を歓迎します!