経験:この質問は上下、配列の簡単な、境界の定義を作成する方法になります。
一方向の各サイクルは、決定されて、決意条件が微妙です!!
その前に、私の判断条件は、その後、ノートの垂直および水平位置ひどく書かれてありますか
ラインは、同じであるか、または同じ列、行または列が増加して増加します。
1 クラスソリューション{ 2 公共一覧<整数> spiralOrder(INT [] []行列){リスト<整数>リスト= 新規のArrayList <> (); 3 であれば(マトリックス== NULL || matrix.length == 0 ) 4 戻りリスト。 5 INTたrowNum = matrix.length。 6 INT colNum引数=行列[0 ] .LENGTH。 7 INTのトップ= 0、ボット=たrowNum-1、左= 0、右= colNum引数- 1 。 8 一方(はlist.size()!=たrowNum * colNum引数) 9 { 10 のために(int型私は=左; iは=右<; iは++ ) 11 { 12 list.add(行列[トップ] [I])。 13 } 14 トップ++ 。 15 であれば(!はlist.size()=たrowNum * colNum引数) 16 のための(INT ; iは=ボットを<I ++はI =上面) 17 { 18 list.add(行列[I] [右])。 19 } 20 right-- 。 21 22 もし(はlist.size()!=たrowNum * colNum引数) 23 以下のために(int型私は右=; I> =左; i-- ) 24 { 25 list.add(行列[ボット] [I])。 26 } 27 bot-- 。 28 であれば(!はlist.size()=たrowNum * colNum引数) 29 のための(INT ; I> =トップi-- I =ボット) 30 { 31 list.add(行列[I] [左])。 32 } 33 ++左; 34 } 35 リターンリスト。 36 } 37 }