Browse Source

add 'Remove K Digits'

tangs 5 years ago
parent
commit
9dc4bdd319
1 changed files with 55 additions and 0 deletions
  1. 55 0
      tags/array/combinationSum/main.go

+ 55 - 0
tags/array/combinationSum/main.go

@@ -0,0 +1,55 @@
+package main
+
+import "fmt"
+
+func main() {
+	var nums []int
+	var target int
+
+	nums = []int{1, 2, 3, 4}
+	target = 3
+	fmt.Println(combinationSum(nums, target))
+
+	return
+	nums = []int{2, 3, 6, 7}
+	target = 7
+	fmt.Println(combinationSum(nums, target))
+
+	nums = []int{2, 3, 5}
+	target = 8
+	fmt.Println(combinationSum(nums, target))
+}
+
+func combinationSum(candidates []int, target int) [][]int {
+	var ret [][]int
+	var mark = map[int]bool{}
+	for i := 0; i < len(candidates); i++ {
+		findSubSet(candidates, candidates[i], target, &ret, mark)
+	}
+	return ret
+}
+
+func findSubSet(nums []int, value, compare int, data *[][]int, mark map[int]bool) bool {
+	var ret = false
+	if value == compare {
+		*data = append(*data, []int{value})
+		ret = true
+	}
+	var distance = compare - value
+	fmt.Println(value, compare, distance, data)
+	for i := 0; i < len(nums) && nums[i] <= distance; i++ {
+		has := findSubSet(nums, nums[i], distance, data, mark)
+		fmt.Println(value, compare, distance, data, has, "----------------", mark)
+		if has {
+			ret = true
+			if _, ok := mark[nums[i]]; ok {
+				continue
+			}
+			mark[nums[i]] = true
+			for j := 0; j < len(*data); j++ {
+				(*data)[j] = append((*data)[j], nums[i])
+			}
+		}
+	}
+	return ret
+}