問題文
行列所与 M X N の要素(M個の 行、 N 列)、スパイラル順に行列のすべての要素を返します。
例1:
入力
:
[ [1、2、3]、
[4、5、6]、
[7、8、9]
] 出力:[1,2,3,6,9,8,7,4,5]
例2:
入力:
[
[1、2、3、4]、
[5、6、7、8]、
[9,10,11,12]
] 出力:[1,2,3,4,8,12,11、 10,9,5,6,7]
問題のリンク
ビデオチュートリアル
あなたはここに詳細なビデオチュートリアルを見つけることができます
思考プロセス
それは我々が単純にスパイラル順序をシミュレートし、印刷することができ、まっすぐ進むの実装質問です。あなたはどちらかの繰り返しそれを行うか、使用再帰(公式Leetcodeソリューションをダウンロードするための基準を参照)を選択することができます。
かなり非常識であるこの男からこの素晴らしい1行のソリューションがあります。
def spiralOrder(self, matrix):
return matrix and list(matrix.pop(0)) + self.spiralOrder(zip(*matrix)[::-1])
https://leetcode.com/problems/spiral-matrix/discuss/20571/1-liner-in-Python-%2B-Ruby
ソリューション
1本の 公共一覧<整数> spiralOrder(INT [] []行列){ 2 一覧<整数> RES = 新規のArrayList <> (); 3 4 もし(マトリックス== NULL || matrix.length == 0 ||行列[0] .LENGTH == 0 ){ 5つの リターンRES。 6 } 7 8 本 .printSpiralOrder(0、0、matrix.length、行列[0 ] .LENGTH、RES、マトリックス); 9つの 10 戻りRES。 11 } 12 13 //printSpiralOrderが悪い名前、動詞を持つ関数が開始され、printSpiralOrderは、クラスが名詞である、機能が動詞である 14 民間 のボイド(printSpiralOrder int型 I、int型 J、int型行サイズ、int型 colSize、一覧<整数> RES、INT [] []行列) { 15 であれば(行サイズ<= 0 || colSize <= 0 ){ 16 リターン。 17 } 18 19 であれば(行サイズ== 1 && colSize == 1 ){ 20 res.add(行列[I] [J])。 21 リターン; 22 } 23 もし(行サイズ== 1 ){ 24 のために(INT K = J、K <J + colSize; K ++ ){ 25 res.add(行列[I] [K])。 26 } 27 リターン。 28 } 29 30 であれば(colSize == 1 ){ 31 のための(int型 K = I、K <I +行サイズあり、k ++ ){ 32 res.add(行列[K] [J])。 33 } 34 リターン。 35 } 36 37 // スパイラル行う 38 のための(int型 K = J、K <J + colSize; K ++ ){ 39 res.add(行列[I] [K])。 40 } 41 42 のために(int型 K = I + 1、K <I +行サイズあり、k ++ ){ 43 res.add(行列[K] [J + colSize - 1 ])。 44 } 45 46 のために(int型 K = J + colSize - 2、K> = I; k-- ){ 47 res.add(行列[I +行サイズ- 1 ] [K])。 48 } 49 50 のために(int型 - ; K> I; k-- 2 K = I +行サイズ){ //両方の開始と終了が必要でi、jは、また、長さを気にすべき 51 res.add(行列[K]を[J])。 52 } 53 54 本 .printSpiralOrder(I + 1、J + 1、行サイズ- 2、colSize - 2 、RES、マトリックス); 55 }
再帰を使用したシミュレーション
時間複雑:M、N行およびマトリックスのCOLであるO(M * N)
空間複雑:O(M * N)我々は、M、Nはマトリクスの行およびCOLある結果を格納するためにリストを使用するため
リファレンス
- Leetcode公式ソリューション(PDFダウンロード)