斜めのトラバース。質問の意味することは、トラバーサルの規則に従って、一次元アレイの出力を2次元配列を与えることです。例、
例:
入力 : [ [1、2、3]、 [4、5、6]、 [7、8、9] ] 出力:[1,2,4,7,5,3,6,8,9]
質問は難易度がエンドがアップしているかのスキャンをスキャンし、どのように境界条件を決定するには、下にどのように決定するかで、何のアルゴリズムではありません。
トラバーサルは、最初に右上、垂直および水平の横断点座標プラスと(X + Y)%2 ===に左下から発見されている場合は 0、 それが右下のトラバース、点の垂直および水平座標のトラバーサル上に残されている場合プラスおよび(X + Y)%2 === 1。これは結論この質問に限定されています。境界条件は、0以上、横軸の境界を超えない縦軸の右側を確保するために、右下の時間に左に行くための唯一の二つの可能性、1に遭遇し、2番目は右上で左のものではない以下0横軸と縦軸に行うよりも確実にするために敷設されたとき左の範囲外。
時間O(M * N)
スペースO(M * N) - 出力メモリ
1 / * * 2 * @param {数[] []}マトリックス 3 * @return {数[]} 4 * / 5 VAR findDiagonalOrder = 関数(行列){ 6 // コーナーケース 7 場合(matrix.length == = 0 ){ 8 リターン[]。 9 } 10 11 // 通常の場合 12 = 0 LET行。 13 LETのCOL = 0 。 図14は、 M =せmatrix.length。 15 LET N =行列[0 ] .LENGTH。 16 RESを聞かせて= []; 17 のために(; K <M * N;せ、K = 0のk ++ ){ 18 res.push(行列[行] [COL])。 19 //が上方に移動 20の 場合((行+ COL)%2 === 0 ){ 21 であれば(COL === N - 1 ){ 22 行++ 。 23 } そう であれば(行=== 0 ){ 24 COL ++ 。 25 } 他{ 26 row-- 。 27 COL ++ ; 28 } 29 } 30 // 下降 31 他{ 32 であれば(行=== M - 1 ){ 33 COL ++ 。 34 } そう であれば(COL === 0 ){ 35 行++ 。 36 } 他{ 37 行++ 。 38 col-- ; 39 } 40 } 41 } 42 リターン解像度; 43 }。