题解 | #集合的所有子集(一)#
集合的所有子集(一)
http://www.nowcoder.com/practice/c333d551eb6243e0b4d92e37a06fbfc9
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> result = new ArrayList<>();
public ArrayList<ArrayList<Integer>> subsets(int[] S) {
ArrayList<Integer> r = new ArrayList<>();
// 找长度为length的子集
for (int length = 0; length <= S.length; length++) {
get(S, length, 0, r);
r.clear();
}
return result;
}
/**
* 找长度为length的子集
* @param s 从s里面找
* @param length 子集数字个数
* @param start 从s的第start个元素开始找
* @param r 已经挑出来的
*/
private void get(int[] s, int length, int start, ArrayList<Integer> r){
if(r.size()==length){ // 子集元素数够了,添加
result.add(new ArrayList<>(r));
return;
}
for (int i = start; i < s.length; i++) {
r.add(s[i]); // 挑第i个元素
get(s, length, i+1, r); // 继续挑
r.remove(r.size() - 1); // 回溯,删除已挑的
}
}
}