二つの螺旋状の行列。タイトルに番号n、要求のn×n行列の出力を与えるように意図され、nはn桁の左右に充填されています。同じタイトルを埋めるために54個の方法。例、
例:
入力:3 出力 : [ [1、2、3]、 [8]、[9,4]、 [7,6]、[5] ]
問題54個の質問の練習はほぼ同じです。充填する境界行と列の動きを見つけることによって達成されます。まず、JSおよびゼロで充填してn×nの二次元配列を作成します。トラバーサル時間、また右にしたがって-下-左-の順に。
時間O(N)
スペースはO(n ^ 2)
1 / * * 2 * @param {数} N 3 * @return {数[] []} 4 * / 5 VAR generateMatrix = 関数(N){ 6つの LETのRES =アレイ(N).fill(0).MAP (()=>アレイ(N).fill(0 ))。 図7は、 rowBegin = 0ましょう。 8 rowEndを聞かせ= N - 1 。 図9は、 colBegin = 0ましょう。 図10は、 colEndを聞かせ= N - 1 。 11 LETのNUM = 1 。 12 13 ながら(rowBegin <= rowEnd && colBegin <= colEnd){ 14 //右 15 のための(iはcolBegin =せ; I <= colEnd; I ++ ){ 16の RES [rowBegin] [I] = NUM ++ 。 17 } 18 rowBegin ++ 。 19 20 // ダウン 21 のための(iはrowBegin =せ; I <= rowEnd; I ++ ){ 22の RES [I] [colEnd] = NUM ++ 。 23 } 24 colEnd-- 。 25 26 //は左 27 用(; I> = colBeginと、iはcolEnd =せi-- ){ 28の RESを[rowEnd] [I] = NUM ++; 29 } 30 rowEnd-- 。 31 32 // 最大 33 のための(iはrowEnd =せ; I> = rowBegin; i-- ){ 34の RES [I] [colBegin] = NUM ++ 。 35 } 36 colBegin ++ 。 37 } 38 リターンRES。 39 }。