| 123456789101112131415161718192021222324252627282930 | 
							- package main
 
- import (
 
- 	"sort"
 
- )
 
- func subsetsWithDup(nums []int) [][]int {
 
- 	sort.Ints(nums)
 
- 	subsets := [][]int{[]int{}}
 
- 	for i, cnt := 0, 0; i < len(nums); i += cnt {
 
- 		for cnt = 1; cnt+i < len(nums) && nums[cnt+i] == nums[i]; cnt++ {
 
- 			// count the number of same elements
 
- 		}
 
- 		preLen := len(subsets)
 
- 		for j := 0; j < preLen; j++ {
 
- 			subset := make([]int, len(subsets[j]))
 
- 			copy(subset, subsets[j]) // deep copy, not create slice (!!!)
 
- 			for k := 0; k < cnt; k++ {
 
- 				subset = append(subset, nums[i])
 
- 				subsets = append(subsets, subset)
 
- 			}
 
- 		}
 
- 	}
 
- 	return subsets
 
- }
 
- // func main() {
 
- // 	nums := []int{1, 2, 2, 3, 4}
 
- // 	fmt.Println(subsetsWithDup(nums))
 
- // }
 
 
  |