您的位置:首页 > 其它

回溯法,subsets

2016-07-24 12:50 302 查看
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
subsets(result, new ArrayList<>(), nums, 0);
return result;
}

private void subsets(List<List<Integer>> result, List<Integer> tmp, int[] nums, int idx) {
result.add(new ArrayList<>(tmp));
for (int i = idx; i < nums.length; i++) {
tmp.add(nums[i]);
subsets(result, tmp, nums, i + 1);
tmp.remove(tmp.size() - 1);
}
}

public List<List<Integer>> subsetsWithDup(int[] nums) {
List<List<Integer>> result = new ArrayList<>();
Arrays.sort(nums);
subsetsWithDup(result, new ArrayList<>(), nums, 0);
return result;
}

private void subsetsWithDup(List<List<Integer>> result, List<Integer> tmp, int[] nums, int idx) {
result.add(new ArrayList<>(tmp));
for (int i = idx; i < nums.length; i++) {
if (i > idx && nums[i] == nums[i - 1]) {
continue;
}
tmp.add(nums[i]);
subsetsWithDup(result, tmp, nums, i + 1);
tmp.remove(tmp.size() - 1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: