您的位置:首页 > 其它

[LeetCode]78. Subsets

2016-12-24 08:29 441 查看
Given a set of distinct integers, nums,
return all possible subsets.

具体题目要求:点击打开链接

思路:例如数组[1,2,3]

1.先添加空new ArrayList;

   ([ ])

2.对于数组nums[0]=1,添加到刚才的空ArrayList里面,然后把当前结果添加到暂时的汇总ArrayList temp里面;

   [ ]->[1],temp:[[1]],result:[[
],[1]] 

3.对于数组nums[1]=2,再继续;

 
 [ ]->[2], [1]->[1,2],temp:[[2],[1,2]],result:[[
],[1],[2],[1,2]] 

4.对于数组nums[2]=3,再继续;

   [ ]->[3], [1]->[1,3], [2]->[2,3], [1,2]->[1,2,3],temp:[[3],[1,3],[2,3],[1,2,3]],result:[[
],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]] 

public List<List<Integer>> subsets(int[] nums) {
Arrays.sort(nums);
List<List<Integer>> result = new ArrayList<>();
result.add(new ArrayList<>());                            //添加空ArrayList

for (int num : nums) {
List<List<Integer>> temp = new ArrayList<>();
for (List<Integer> set : result) {
List<Integer> newSet = new ArrayList<>(set);
newSet.add(num);
temp.add(newSet);
}
result.addAll(temp);
}
return result;
}

回溯法

public ArrayList<ArrayList<Integer>> subsets(int[] num) {
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
if(num == null || num.length == 0) {
return result;
}
ArrayList<Integer> list = new ArrayList<Integer>();
Arrays.sort(num);
subsetsHelper(result, list, num, 0);
return result;
}

private void subsetsHelper(ArrayList<ArrayList<Integer>> result,
ArrayList<Integer> list, int[] num, int pos) {
result.add(new ArrayList<Integer>(list));

for (int i = pos; i < num.length; i++) {
list.add(num[i]);
subsetsHelper(result, list, num, i + 1);
list.remove(list.size() - 1);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: