|
@@ -17,20 +17,16 @@ type Int2DSlice [][]int
|
|
|
|
|
|
func (p Int2DSlice) Len() int { return len(p) }
|
|
func (p Int2DSlice) Len() int { return len(p) }
|
|
func (p Int2DSlice) Less(i, j int) bool {
|
|
func (p Int2DSlice) Less(i, j int) bool {
|
|
- if len(p[i]) == 0 {
|
|
|
|
- return true
|
|
|
|
- }
|
|
|
|
- if len(p[j]) == 0 {
|
|
|
|
- return false
|
|
|
|
|
|
+ if len(p[i]) == 0 || len(p[j]) == 0 {
|
|
|
|
+ return len(p[i]) == 0
|
|
}
|
|
}
|
|
bound := minInt(len(p[i]), len(p[j]))
|
|
bound := minInt(len(p[i]), len(p[j]))
|
|
- fmt.Println(p[i][0], p[j][0], bound)
|
|
|
|
for k := 0; k < bound; k++ {
|
|
for k := 0; k < bound; k++ {
|
|
- if p[i][k] < p[j][k] {
|
|
|
|
- return true
|
|
|
|
|
|
+ if p[i][k] != p[j][k] {
|
|
|
|
+ return p[i][k] < p[j][k]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
- return len(p[i]) == bound
|
|
|
|
|
|
+ return len(p[i]) < len(p[j])
|
|
}
|
|
}
|
|
func (p Int2DSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|
func (p Int2DSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|
|
|
|
|
@@ -56,15 +52,16 @@ func subsetsWithDup(nums []int) [][]int {
|
|
subsetsMap := make(map[string]bool, 0)
|
|
subsetsMap := make(map[string]bool, 0)
|
|
result := subsetsWithDupIter(nums, subsets, subsetsMap)
|
|
result := subsetsWithDupIter(nums, subsets, subsetsMap)
|
|
sort.Sort(Int2DSlice(result))
|
|
sort.Sort(Int2DSlice(result))
|
|
|
|
+ fmt.Println(subsetsMap)
|
|
return result
|
|
return result
|
|
}
|
|
}
|
|
|
|
|
|
func testSubsetsWithDup(nums []int) {
|
|
func testSubsetsWithDup(nums []int) {
|
|
subsets := subsetsWithDup(nums)
|
|
subsets := subsetsWithDup(nums)
|
|
- fmt.Println("The subsets of", nums, "is", subsets)
|
|
|
|
|
|
+ fmt.Println("\nThe subsets of", nums, "is", subsets)
|
|
}
|
|
}
|
|
|
|
|
|
func main() {
|
|
func main() {
|
|
- nums := []int{1, 2, 1, 2}
|
|
|
|
|
|
+ nums := []int{1, 2, 2, 1, 2, 3, 5, 7, 2}
|
|
testSubsetsWithDup(nums)
|
|
testSubsetsWithDup(nums)
|
|
}
|
|
}
|