您的位置:首页 > 编程语言 > Java开发

Leetcode-78. Subsets

2016-10-11 15:26 453 查看
前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发CSDN,mcf171专栏。

博客链接:mcf171的博客


——————————————————————————————

Given a set of distinct integers, nums, return all possible subsets.

Note: The solution set must not contain duplicate subsets.

For example,

If nums = 
[1,2,3]
, a solution
is:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]

这个题目和77是类似的,我不由感叹递归大法好。。。Your runtime beats 91.55% of java submissions.
public class Solution {
public List<List<Integer>> subsets(int[] nums) {
List<List<Integer>> results = new ArrayList<List<Integer>>();
List<Integer> currentResults = new ArrayList<Integer>();
List<Integer> remain = new ArrayList<Integer>();
for(int num : nums) remain.add(num);

generate(results,currentResults,remain);
results.add(new ArrayList<Integer>());
return results;
}

public void generate(List<List<Integer>> results, List<Integer> currentResults, List<Integer> remain){

int times = remain.size();
for(int i = 0 ; i < times; i ++){
currentResults.add(remain.get(0));
remain.remove(0);
results.add(new ArrayList<Integer>(currentResults));
generate(results,currentResults,new ArrayList<Integer>(remain));
currentResults.remove(currentResults.size()-1);
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java leetcode 算法