Leetcode 59スパイラルマトリックスII(スパイラルマトリックスII)

これが私の最初のブログで、まず気軽に書き込み、フォローアップは、より多くのコンテンツを追加します。

注:これは、配列(インデックス)の位置を示し、インデックス0で開始することです。

件名の説明:

正の整数所与  N-を生成するために、1を含む、  N- 2のすべての要素、および要素は螺旋状に時計回りに次の正方行列に配置されています。

ソリューション:

この質問は、関係の焦点が位置(インデックス)に対応する反復配列、次の例を遵守を見つけることです。

私は、jは列を表し、行を表し、nは列の数(列の数)を表します

[ 
 [1、2、3、4]、
 [12、13、14、5]、
 [11、16、15、6]、
[10、9、8、7]
]

第一の位置の最初の行から(0,0)から(0,3)、行のそれぞれの数の位置と一致して、列の数は増加して、
最初の行が満たされる場合、残りの図は、第1の位置(0から続きます、 3))が最終位置(3,3に達するまで、デジタルダウン格納し始めます。
それが位置(3,3)に達するまで、このプロセスでは、列数が不変である、行の数は、増加した;次に同様に、位置から(3,3)の位置に(3,0)、
行数ではありません最終位置(3,3)の位置(1,0)に、不変の列と行の数を減らす、変数の列の数を削減しつつ。
1-12と13-16反復プロセスが似ている反復プロセスで見つけることができ、最初から反復の初期位置の底になっています。
[ 
 [1、2、3、4]、
 [12]、[5]、
 [11]、[6]、
[10、9、8、7]
]
[ 
 [13、14]、
 [16、15]、
]

4つの重要な点の変化は(代数で表される)1-12反復検索を発生します
。(0 ,. 1-N-)、(1-N-、N- 。。-1)、(N - 1、0)、(1、0)
13-16反復臨界点:
(1、N - 2)、(N - 2、N 2 - )、(N - 2 ,. 1)。 、(2、1)
次のような関係を見つけることは容易である
; H = 0
(0、NH-1)、(NH-1、NH-1)、(NH-1、0)、(H + 1、H)
場合到達点(これは内部開始まで反復の新たなラウンドから)(H + 1、H)時間、H ++、及びI、J増分モードはjをインクリメントし、それが同じiは、元の状態に復元しなければなりません。
これは、後で簡単にコードに発生し、それだけに対応するアレイ位置に記憶されている反復のn×n個の数字を生成する必要ができます。
ここではPythonで実装されたコードは次のようになります。

DEF generateMatrix(N):
    RES = [0 用の I における(N)の範囲] のための I における範囲(N)] 
    I、J、フラグ = 0、0、0 
    、H = 0
     のため、K の範囲(1、N * N + 1 ):
         もし J == NH-1 および I == H:
            フラグ = 1つ
         のelif I == NH-1 および J == NH-1 
            フラグ = 2
         のelif I == NH-1 および J == H: 
            国旗= 3
         のelif I == H + 1 および jは==のH:
            H + = 1つの
            フラグ = 0 
        RES [I] [J] = kの
         場合フラグ== 0:
            J + = 1
         ELIFフラグ== 1 
            I + = 1
         ELIFのフラグ== 2 
            J - = 1
         ELIFのフラグ== 3 
            I - = 1つの
     戻り RES

 

おすすめ

転載: www.cnblogs.com/Alevals/p/11563398.html