dengxinyi 6 tahun lalu
induk
melakukan
39787bb036
2 mengubah file dengan 66 tambahan dan 0 penghapusan
  1. 23 0
      medium/376.wiggle-subsequence.go
  2. 43 0
      medium/377.combination-sum-iv.go

+ 23 - 0
medium/376.wiggle-subsequence.go

@@ -0,0 +1,23 @@
+func wiggleMaxLength(nums []int) int {
+	n := len(nums)
+	if n <= 1 {
+		return n
+	}
+	i, max, pre := 1, 1, 0
+	for ; i < n; i++ { // Find the first slope
+		diff := nums[i] - nums[i-1]
+		if diff != 0 {
+			pre = diff
+			max++
+			break
+		}
+	}
+	for i = i + 1; i < n; i++ { // Count the change of dir
+		diff := nums[i] - nums[i-1]
+		if pre*diff < 0 {
+			pre = diff
+			max++
+		}
+	}
+	return max
+}

+ 43 - 0
medium/377.combination-sum-iv.go

@@ -0,0 +1,43 @@
+var empty struct{} = struct{}{}
+
+func combinationSum4(nums []int, target int) int {
+	// res := make(map[string]struct{})
+	// dfs(nums, target, []int{}, &res)
+	// return len(res)
+	n := len(nums)
+	if n == 0 {
+		return 0
+	}
+	sort.Ints(nums)
+	dp := make([]int, target+1)
+	dp[0] = 1
+	for i := 1; i <= target; i++ {
+		for _, val := range nums {
+			if i < val {
+				break
+			}
+			dp[i] += dp[i-val]
+		}
+	}
+	return dp[target]
+}
+
+func dfs(nums []int, target int, pre []int, res *map[string]struct{}) {
+	if target < 0 {
+		return
+	} else if target == 0 {
+		(*res)[ints2str(pre)] = empty
+		return
+	}
+	for _, i := range nums {
+		dfs(nums, target-i, append(pre, i), res)
+	}
+}
+
+func ints2str(nums []int) string {
+	str := make([]string, len(nums))
+	for i, v := range nums {
+		str[i] = strconv.Itoa(v)
+	}
+	return strings.Join(str, ",")
+}