を含む整数アレイが与えられた M × N 要素、構築 M × N スパイラル順にそれから行列。

例えば、

Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 
Output:
 
[ 1   2   3   4   5 ]
[ 16  17  18  19  6 ]
[ 15  24  25  20  7 ]
[ 14  23  22  21  8 ]
[ 13  12  11  10  9 ]

Practice this problem

この問題は、主に次の問題の逆です。

行列をスパイラル順に印刷する

 
考え方は同じです。指定されたアレイから要素を1つずつ読み取り、行列をらせん状に埋めます。スパイラルの順序を維持するために、それぞれマトリックスの上部、右、下部、および左隅に4つのループが使用されます。

以下は、上記のアイデアに基づくC++、Java、およびPythonでの実装です。

C++


ダウンロード  コードを実行する

出力:

  1   2   3   4   5
  16  17  18  19  6
  15  24  25  20  7
  14  23  22  21  8
  13  12  11  10  9

Java


ダウンロード  コードを実行する

出力:

[ 1, 2, 3, 4, 5]
[16, 17, 18, 19, 6]
[15, 24, 25, 20, 7]
[14, 23, 22, 21, 8]
[13, 12, 11, 10, 9]

Python


ダウンロード  コードを実行する

出力:

[ 1, 2, 3, 4, 5]
[16, 17, 18, 19, 6]
[15, 24, 25, 20, 7]
[14, 23, 22, 21, 8]
[13, 12, 11, 10, 9]

提案されたソリューションの時間計算量は O(M × N) のために M × N マトリックスであり、余分なスペースは必要ありません。

 
エクササイズ: 上記の問題の再帰的的な解決策を書いてください。