2017.9.14
首先 子集一定包含一个空子集。
除去空子集。子集中包含的元素个数 为 1 ~ nums.length
由于nums中的数字都不相同,又要求是非降序排列。因此,得到元素个数为 i 的子集 ,只需要 在元素个数为i-1的子集上进行添加即可。
class Solution {
/**
* @param S: A set of numbers.
* @return: A list of lists. All valid subsets.
*/
public static List<List<Integer>> subsets(int[] nums) {
// write your code here
List<List<Integer>> res = new ArrayList<>();
ArrayList<Integer> tmp = new ArrayList<Integer>();
res.add(tmp);
if(nums.length == 0){
return res;
}
for(int i = 0;i < nums.length;i++){
ArrayList<Integer> tmp1 = new ArrayList<Integer>();
tmp1.add(nums[i]);
res.add(tmp1);
}
int count = 1;
int flag = 1;
while(count < nums.length){
for(int k = 0; k < nums.length; k++){
List<Integer> tmp1 = res.get(flag);
int number = tmp1.get(tmp1.size()-1);
if(nums[k] > number){
ArrayList<Integer> tmp2 = new ArrayList<Integer>();
tmp2.addAll(tmp1);
tmp2.add(nums[k]);
res.add(tmp2);
count = tmp2.size();
}
}
flag++;
}
return res;
}
}