バックトラック深さ優先探索&テーマ別-491。増加するサブシーケンスのLeetcode(サブ配列を増やします)

バックトラック深さ優先探索&テーマ別-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 )。
        } 
    } 
}

 

おすすめ

転載: www.cnblogs.com/qinyuguan/p/11367013.html