程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> LeetCode -- Subsets II

LeetCode -- Subsets II

編輯:C++入門知識

LeetCode -- Subsets II


題目描述:


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> SubsetsWithDup(int[] nums) 
    {
    	Dictionary> result = new Dictionary>();
    	Travel(nums.ToList() ,new List(), 0, result);
    	
    	return result.Values.ToList();
    }


private void Travel(IList nums, IList arr, int index, Dictionary> result)
{
	var k = K(ref arr);
	if(!result.ContainsKey(k)){
		result.Add(k, new List(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 arr){
	arr = arr.OrderBy(x=>x).ToList();
	return string.Join(,, arr);
}


}
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved