包子Leetcodeソリューション54:Sprialマトリックス

問題文 

行列所与  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ある結果を格納するためにリストを使用するため

 

 

リファレンス

おすすめ

転載: www.cnblogs.com/baozitraining/p/12015938.html