幂集。编写一种方法,返回某集合的所有子集。集合中不包含重复的元素。
说明:
示例:
输入: nums = [1,2,3]
输出:
[
[3],
[1],
[2],
[1,2,3],
[1,3],
[2,3],
[1,2],
[]
]
记集合为 Q(n),n 为集合中元素个数(不重复)。Sub(i) 表示集合中 i 个元素组成的所有子集,则有如下递推关系:
S u b ( i + 1 ) = S u b ( i ) ∪ S u b ( i ) . A d d ( e l e m ( i + 1 ) ) Sub(i +1)=Sub(i) \cup Sub(i).Add(elem(i+1)) Sub(i+1)=Sub(i)∪Sub(i).Add(elem(i+1))
其中, e l e m ( i + 1 ) elem(i+1) elem(i+1) 表示新增加的第 i + 1 i + 1 i+1 个元素。以集合 { 1 , 2 , 3 } \{1,2,3\} {1,2,3} 为例:
public class Solution {
public IList<IList<int>> Subsets(int[] nums) {
IList<IList<int>> ans = new List<IList<int>>();
ans.Add(new List<int>()); // 添加空集
if (nums.Length == 0) return ans;
foreach (int t in nums) {
int cnt = ans.Count; // 取出原来的长度
for (int j = 0; j < cnt; j++) {
// 复制原来所有的子集,将新元素添加进去
List<int> tmp = new List<int>(ans[j]) { t };
ans.Add(tmp);
}
}
return ans;
}
}