78. Subsets

来源:互联网 发布:软件风险分析 编辑:程序博客网 时间:2024/05/18 02:41

题目

求所有子集项
Given a set of distinct integers, nums, return all possible subsets.

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],  []]

思路

深度搜索

代码

public class Solution    {        private IList<IList<int>> rtn = new List<IList<int>>();        public IList<IList<int>> Subsets(int[] nums)        {            rtn.Add(new List<int>());            rtn.Add(new List<int>(nums));            dfs(nums, new List<int>(), 0, 1); //call dfs            return rtn;        }        //assert: ndigts>=1        //dfs: two return conditions for dfs recursion:        //1. size for an item of this subsets increases to ndigits        //2. depth-first-search for nums[i] with ndigits is NOT to the end point.         private void dfs(int[] nums, IList<int> item, int start, int ndigts)        {            if (ndigts == item.Count)            {                rtn.Add(new List<int>(item));                return; //dfs recursion return condition 1            }            while (ndigts < nums.Length)            {                for (int i = start; i < nums.Length; i++)                {                    item.Add(nums[i]);                    dfs(nums, item, i + 1, ndigts); //forward 1 to search                    item.RemoveAt(item.Count - 1);                }                if (item.Count == 0)                    ndigts++;                else //dfs recursion return condition 2                    return;            }        }    }