/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public List<List<Integer>> subsetsWithNew(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if(nums==null || nums.length==0) return res;
dfsWithNew(res, new ArrayList<>(), 0, nums);
return res;
}
private void dfsWithNew(List<List<Integer>> res, List<Integer> list, int pos, int[] nums) {
res.add(new ArrayList<Integer>(list));
if(pos==nums.length+1) return;
for(int i=pos; i<nums.length; i++) {
list.add(nums[i]);
dfsWithNew(res, list, i+1, nums);
list.remove(list.size()-1);
}
}
public List<List<Integer>> subsetsWithoutNew(int[] nums) {
List<List<Integer>> res = new ArrayList<>();
if(nums==null || nums.length==0) return res;
dfsWithoutNew(res, new ArrayList<>(), 0, nums);
return res;
}
private void dfsWithoutNew(List<List<Integer>> res, List<Integer> list, int pos, int[] nums) {
res.add(list);
if(pos==nums.length+1) return;
for(int i=pos; i<nums.length; i++) {
list.add(nums[i]);
dfsWithoutNew(res, list, i+1, nums);
list.remove(list.size()-1);
}
}
{
Ideone app = new Ideone();
int[] nums = { 5, 2 };
System.
out.
println("*** With new ***"); List<List<Integer>> subsets = app.subsetsWithNew(nums);
subsets.
forEach(System.
out::println
);
System.
out.
println("*** Without new ***"); subsets = app.subsetsWithoutNew(nums);
subsets.
forEach(System.
out::println
); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKICAgIHB1YmxpYyBMaXN0PExpc3Q8SW50ZWdlcj4+IHN1YnNldHNXaXRoTmV3KGludFtdIG51bXMpIHsKICAgICAgICBMaXN0PExpc3Q8SW50ZWdlcj4+IHJlcyA9IG5ldyBBcnJheUxpc3Q8PigpOwogICAgICAgIGlmKG51bXM9PW51bGwgfHwgbnVtcy5sZW5ndGg9PTApIHJldHVybiByZXM7CiAgICAgICAgZGZzV2l0aE5ldyhyZXMsIG5ldyBBcnJheUxpc3Q8PigpLCAwLCBudW1zKTsKICAgICAgICByZXR1cm4gcmVzOwogICAgfQoKICAgIHByaXZhdGUgdm9pZCBkZnNXaXRoTmV3KExpc3Q8TGlzdDxJbnRlZ2VyPj4gcmVzLCBMaXN0PEludGVnZXI+IGxpc3QsIGludCBwb3MsIGludFtdIG51bXMpIHsKICAgICAgICByZXMuYWRkKG5ldyBBcnJheUxpc3Q8SW50ZWdlcj4obGlzdCkpOwogICAgICAgIGlmKHBvcz09bnVtcy5sZW5ndGgrMSkgcmV0dXJuOwogICAgICAgIGZvcihpbnQgaT1wb3M7IGk8bnVtcy5sZW5ndGg7IGkrKykgewogICAgICAgICAgICBsaXN0LmFkZChudW1zW2ldKTsKICAgICAgICAgICAgZGZzV2l0aE5ldyhyZXMsIGxpc3QsIGkrMSwgbnVtcyk7CiAgICAgICAgICAgIGxpc3QucmVtb3ZlKGxpc3Quc2l6ZSgpLTEpOwogICAgICAgIH0KICAgIH0KCQogICAgcHVibGljIExpc3Q8TGlzdDxJbnRlZ2VyPj4gc3Vic2V0c1dpdGhvdXROZXcoaW50W10gbnVtcykgewogICAgICAgIExpc3Q8TGlzdDxJbnRlZ2VyPj4gcmVzID0gbmV3IEFycmF5TGlzdDw+KCk7CiAgICAgICAgaWYobnVtcz09bnVsbCB8fCBudW1zLmxlbmd0aD09MCkgcmV0dXJuIHJlczsKICAgICAgICBkZnNXaXRob3V0TmV3KHJlcywgbmV3IEFycmF5TGlzdDw+KCksIDAsIG51bXMpOwogICAgICAgIHJldHVybiByZXM7CiAgICB9CgogICAgcHJpdmF0ZSB2b2lkIGRmc1dpdGhvdXROZXcoTGlzdDxMaXN0PEludGVnZXI+PiByZXMsIExpc3Q8SW50ZWdlcj4gbGlzdCwgaW50IHBvcywgaW50W10gbnVtcykgewogICAgICAgIHJlcy5hZGQobGlzdCk7CiAgICAgICAgaWYocG9zPT1udW1zLmxlbmd0aCsxKSByZXR1cm47CiAgICAgICAgZm9yKGludCBpPXBvczsgaTxudW1zLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICAgIGxpc3QuYWRkKG51bXNbaV0pOwogICAgICAgICAgICBkZnNXaXRob3V0TmV3KHJlcywgbGlzdCwgaSsxLCBudW1zKTsKICAgICAgICAgICAgbGlzdC5yZW1vdmUobGlzdC5zaXplKCktMSk7CiAgICAgICAgfQogICAgfQoJCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KICAgIHsKICAgICAgICBJZGVvbmUgYXBwID0gbmV3IElkZW9uZSgpOwogICAgICAgIGludFtdIG51bXMgPSB7IDUsIDIgfTsKCQkKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIioqKiBXaXRoIG5ldyAqKioiKTsKICAgICAgICBMaXN0PExpc3Q8SW50ZWdlcj4+IHN1YnNldHMgPSBhcHAuc3Vic2V0c1dpdGhOZXcobnVtcyk7CiAgICAgICAgc3Vic2V0cy5mb3JFYWNoKFN5c3RlbS5vdXQ6OnByaW50bG4pOwoJCQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbigiKioqIFdpdGhvdXQgbmV3ICoqKiIpOwogICAgICAgIHN1YnNldHMgPSBhcHAuc3Vic2V0c1dpdGhvdXROZXcobnVtcyk7CiAgICAgICAgc3Vic2V0cy5mb3JFYWNoKFN5c3RlbS5vdXQ6OnByaW50bG4pOwogICAgfQp9