サブセットIIを見つける

トピック:

繰り返される要素を含む可能性のある整数配列numsを指定すると、配列のすべての可能なサブセット(べき集合)を返します。

注:ソリューションセットに重複するサブセットを含めることはできません。

ここに画像の説明を挿入
分析:

参照:サブセットを
変更しましょうI:最初に配列を並べ替え、
次に再帰ループで、現在の番号が前の番号と同じかどうかを判断し、同じ場合はスキップします。
つまり、[1,2,2,2]の場合、0添え字[1]と1添え字[2]の再帰ループのみが実行され、3添え字以降は直接スキップされます。

コード:

class Solution {
    
    
    public List<List<Integer>> subsetsWithDup(int[] nums) {
    
    
    List<List<Integer>> ans = new ArrayList<>();
    Arrays.sort(nums); //排序
    getAns(nums, 0, new ArrayList<>(), ans);
    return ans;
}

private void getAns(int[] nums, int start, ArrayList<Integer> temp, List<List<Integer>> ans) {
    
    
    ans.add(new ArrayList<>(temp));
    for (int i = start; i < nums.length; i++) {
    
    
        //和上个数字相等就跳过
        if (i > start && nums[i] == nums[i - 1]) {
    
    
            continue;
        }
        temp.add(nums[i]);
        getAns(nums, i + 1, temp, ans);
        temp.remove(temp.size() - 1);
    }
}


}

おすすめ

転載: blog.csdn.net/weixin_42120561/article/details/114269261