LeetCode-491インクリメントサブシーケンス
テーマ説明:整数配列を与えて、あなたの任務はすべての配列の増分サブシーケンスを見つけることで、増分サブシーケンスの長さは少なくとも2です.例:
入力:[4,6,7,7]出力:[[4,6],[4,7],[4,6,7],[4,6,7],[4,6,7],[6,7],[7,7],[7,7],[4,7,[4,7,7]]
説明:所与の配列の長さは15を超えない. 配列の整数範囲は[−100100]である. 所与の配列には重複数が含まれる場合があり、等しい数は増加の1つと見なすべきである.
考え方:
この問題はLeetCode-39(組合せ総和)という問題に似ていて、構想は再帰遡及の一般的なやり方で解決することであり、異なるのはこの問題が最終的にsetを採用して重くする必要があることだ.
Javaコード:
入力:[4,6,7,7]出力:[[4,6],[4,7],[4,6,7],[4,6,7],[4,6,7],[6,7],[7,7],[7,7],[4,7,[4,7,7]]
説明:
考え方:
この問題はLeetCode-39(組合せ総和)という問題に似ていて、構想は再帰遡及の一般的なやり方で解決することであり、異なるのはこの問題が最終的にsetを採用して重くする必要があることだ.
Javaコード:
class Solution {
public List<List<Integer>> findSubsequences(int[] nums) {
Set<List<Integer>> res = new HashSet<>(); //
findSubList(res,nums,0,new ArrayList<Integer>());
return new ArrayList<List<Integer>>(res);
}
public void findSubList(Set<List<Integer>> res,int[] nums,int index,List<Integer> tempList){
if(tempList.size()>=2){ // 2
res.add(new ArrayList<>(tempList));
}
for(int i=index;i<nums.length;i++){
if(tempList.size()==0 || tempList.get(tempList.size()-1) <= nums[i]){
tempList.add(nums[i]);
findSub(res,nums,i+1,tempList); //
tempList.remove(tempList.size()-1);
}
}
}
}