LeetCode 498対角トラバーススパイラルマトリックス

ここでのオリジナルタイトルリンク:https://leetcode.com/problems/diagonal-traverse/

トピック:

以下の図に示すようにN個の要素(M行、N列を)×Mの行列が与えられ、対角順に行列のすべての要素を返します。

例:

入力:
[
 [1、2、3]、
 [4、5、6]、
 [7、8、9]
]

出力:[1,2,4,7,5,3,6,8,9]

説明:

注意:

与えられた行列の要素の総数は、10,000を超えません。

ソリューション:

結果のサイズはM * Nであるべきです。

R + Cがあっても、行列のインデックスを右に移動されている各値について。それが右に当たっている場合はyesの場合、最初のチェック下に移動します。はい、右に移動した場合には、アップ当たっている場合は、確認してください。それ以外の場合は右に移動します。

それがダウンして当たっている場合はR + cは、行列のインデックスは、左down.Firstチェックを奇数に移動される場合にはそうならば、右に移動します。それが左に当たっているかどうかをチェックyesの場合その後、下に移動します。それ以外の場合は上下左に移動。

これは、それが最初に動くことになる方向、それはコーナーを打ったときのように考えてください。

時間複雑:O(M * N)。M = matrix.length。N =行列[0] .LENGTH。

スペース:O(1)。かかわらず、resは。

ACのJava:

1  クラスソリューション{
 2      公共 のint [] findDiagonalOrder(INT [] []行列){
 3          であれば(マトリックス== NULL || matrix.length == 0 ||行列[0] .LENGTH == 0 ){
 4              リターン 新しいです INT [0 ]。
5          }
 6          
7          INT M = matrix.length。
8          INT N =行列[0 ] .LENGTH。
9          INT [] RES = 新しい INT [M * N]。
10          INT R = 0 11          INTC = 0 12          のためにINT ; I <M * N I ++ iが0 = {)
 13の              RES [I] = 行列[R] [C]。
14              
15              もし((R + C)%2 == 0 ){
 16                  であれば(C == N-1 ){
 17                      R ++ 18                  } そう であれば(R == 0 ){
 19                      C ++ 20                  } {
 21                      r--の22                      C ++ ;
23                 }
 24              } {
 25                  であれば(R == M - 1 ){
 26                      C ++ 27                  } そう であれば(C == 0 ){
 28                      R ++ 29                  } {
 30                      R ++ 31                      C-- 32                  }
 33              }
 34          }
 35の         
36          戻りRES。
37     }
 38 }

同様のスパイラルマトリックス

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/12015933.html