前言:为了后续的实习面试,开始疯狂刷题,非常欢迎志同道合的朋友一起交流。因为时间比较紧张,目前的规划是先过一遍,写出能想到的最优算法,第二遍再考虑最优或者较优的方法。如有错误欢迎指正。博主首发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);
}
}
}