题目:
解题思路:
动态规划
回溯法
代码:
package com.janeroad;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created on 2020/10/1.
*
* [@author](https://my.oschina.net/arthor) LJN
*/
public class Test51 {
public static List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> ans = new ArrayList<>();
Arrays.sort(nums);
getAns(nums, 0, new ArrayList<>(), ans);
return ans;
}
private static 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);
}
}
public static void main(String[] args) {
int[] nums = new int[]{1,2,2};
for (int i = 0; i < subsetsWithDup(nums).size(); i++) {
System.out.println(subsetsWithDup(nums).get(i));
}
}
}
0