バックトラック深さ優先探索&テーマ別-491。増加するサブシーケンスのLeetcode(サブ配列を増やします)
問題解決の深さ優先探索の詳細、クリックしてください
整数の配列を考えると、あなたのタスクは、サブシーケンスの長さを長くすることは、少なくとも2である、配列のすべての増加部分列を見つけることです。 例: 入力:[ 4、6、7、7 ] 出力:[ 4,6]、[4,7]、[4,6]、[7]、[4、6、7、7]、[6、7 ]、[6]、[7,7]、[7,7]、[4,7,7 ]] 説明: 配列の長さが15未満が与えられます。 アレイは、[の範囲の整数である -100100 ]。 指定された配列が重複番号を含んでいてもよい、等しい数が増加した場合として見られるべきです。
以上最後の要素に等しく、再びリスト番号を取って、最初の要素から入力されました。
ACコード:
クラスのソリューション{ セット <リスト<Integer型>> ANS = 新しい HashSetの<> (); 公衆リスト<リスト<整数>> findSubsequences(int型{[] NUMS)の 場合(nums.length == 0 || NUMS == NULL)を返す 新規のArrayList <> (ANS)を、 DFS(NUMS、 0、新しいのArrayList <Integer型> ()); 返す 新しいのArrayList <> (ANS)。 } プライベート ボイド DFS(INT [] NUMS、INTのステップ、のArrayList <整数> リスト){ もし(はlist.size()> = 2 ){ ans.add(新規のArrayList <> (リスト))。 } のために(int型 I =ステップと、iが<nums.lengthを、私は++ ){ 場合(list.isEmpty()&& list.get(はlist.size() - 1)!> {[I] NUMS)を 続けます。 } list.add(NUMS [I])。 DFS(NUMS、I 1 、リスト)。 list.remove(はlist.size() -1 )。 } } }