描述
Given a set of distinct integers, nums, return all possible subsets (the power set).
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],
[]
]
- 思路
首先观察结果的规律,设集合P={},那么P的子集即有1个
集合P={1},那么P的子集即有2个
集合P={1,2},那么P的子集即有4个
集合P={1,2,3},那么P的子集即有8个
集合P={1,2,3,4},那么P的子集即有16个
可以观察到规律若给定的集合有n个元素,则子集有2的n次方个。
那么,这些子集是如何生成的呢?
同样,我们可以观察子集生成的规律,
集合P={},时子集为{{}},
集合P={1},时子集为{{},{1}},
集合P={1,2},时子集为{{},{1},{2},{1,2}},
可以观察得到,集合每次增加一个元素m,子集就会添加所有原子集+m。
例如p={1,2}时,子集结果将会为p={1}的子集并上p={1}的子集+m,
即子集结果为{{},{1}}并上{{2},{1,2}}。
上面的规律用程序表示即为:遍历给定的集合P,遍历该集合,将其元素不断添加到已生成的集合中。 - 代码(c#)
public IList<IList<int>> Subsets(int[] nums)
{
List<IList<int>> result = new List<IList<int>>();
result.Add(new List<int>());//添加空集合
for (int i = 0; i < nums.Length; i++)
{
int count = result.Count;
for (int j = 0; j < count; j++)
{
var item = result[j].ToList();
item.Add(nums[i]);
result.Add(item);
}
}
return result;
}
- 相关链接
LeetCode原题地址:https://leetcode.com/problems/subsets/description/