LeetCode -- Subsets II

来源:互联网 发布:sql server denty_rank 编辑:程序博客网 时间:2024/06/05 02:52
题目描述:


Given a collection of integers that might contain duplicates, nums, 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 nums = [1,2,2], a solution is:


[
  [2],
  [1],
  [1,2,2],
  [2,2],
  [1,2],
  []
]


思路:
又是一道backtracking题目。
本题与Combination Sum极为类似。


需要注意去重,使用哈希来存升序key。


实现代码:


public class Solution {    public IList<IList<int>> SubsetsWithDup(int[] nums)     {    Dictionary<string, IList<int>> result = new Dictionary<string, IList<int>>();    Travel(nums.ToList() ,new List<int>(), 0, result);        return result.Values.ToList();    }private void Travel(IList<int> nums, IList<int> arr, int index, Dictionary<string , IList<int>> result){var k = K(ref arr);if(!result.ContainsKey(k)){result.Add(k, new List<int>(arr));}for(var i = index ;i < nums.Count; i++){arr.Add(nums[i]);Travel(nums, arr, i + 1, result);arr.Remove(nums[i]);}}private string K(ref IList<int> arr){arr = arr.OrderBy(x=>x).ToList();return string.Join(",", arr);}}


1 0
原创粉丝点击