Given a set of distinct integers, S, return all possible subsets.
Note:
- Elements in a subset must be in non-descending order.
- The solution set must not contain duplicate subsets.
For example,
If S = [1,2,3]
, a solution is:
For example,[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
不重复集合求子集
每增加一个元素,都是在原来的子集基础上再添加该元素,即两倍原来的子集
public class Solution { public ArrayList<ArrayList<Integer>> subsets(int[] S) { Arrays.sort(S); ArrayList<ArrayList<Integer>> result=new ArrayList<ArrayList<Integer>>(); ArrayList<Integer> tmp=new ArrayList<Integer>(); result.add(tmp); for(int i=0;i<S.length;i++) { int len=result.size(); for(int j=0;j<len;j++) { tmp.clear(); tmp=(ArrayList<Integer>) result.get(j).clone(); //克隆是因为引用指向同一块内存 tmp.add(S[i]); result.add((ArrayList<Integer>) tmp.clone()); //克隆不理解</span> } } return result; } }