邓心一 6 år sedan
förälder
incheckning
f336088caf
2 ändrade filer med 43 tillägg och 9 borttagningar
  1. 24 9
      hard/282.expression-add-operators.go
  2. 19 0
      medium/260.single-number-iii.go

+ 24 - 9
hard/282.expression-add-operators.go

@@ -1,15 +1,30 @@
-package main
-
 import (
-	"fmt"
+	"strconv"
 )
 
-func addOperators(num string, target int) []string {
-	
+func addOperators(num string, target int) (res []string) {
+	DFS(num, target, 0, "", 0, 0, &res)
+	return
 }
 
-func dfs(res *[]string, num string, target)
-
-func main() {
-	fmt.Println(addOperators("105", 5))
+func DFS(num string, target int, pos int, exp string, prev int, curr int, res *[]string) {
+	if pos == len(num) && curr == target {
+		*res = append(*res, exp)
+		return
+	}
+	for i := pos; i < len(num); i++ {
+		if num[pos] == '0' && pos < i { // Avoid leading zero
+			break
+		}
+		str := num[pos:i+1]
+		n, _ := strconv.Atoi(str)
+		if pos == 0 { // Init DFS
+			DFS(num, target, i+1, str, n, n, res)
+			continue
+		}
+		DFS(num, target, i+1, exp+"+"+str, n, curr+n, res)
+		DFS(num, target, i+1, exp+"-"+str, -n, curr-n, res)
+		DFS(num, target, i+1, exp+"*"+str, prev*n, curr-prev+prev*n, res)
+	}
 }
+

+ 19 - 0
medium/260.single-number-iii.go

@@ -0,0 +1,19 @@
+func singleNumber(nums []int) []int {
+	n, a, b := len(nums), 0, 0
+	for i := 0; i < n; i++ {
+		a ^= nums[i]
+	}
+	mask := 1
+	for mask & a == 0 {
+		mask <<= 1
+	}
+	a = 0
+	for i := 0; i < n; i++ {
+		if nums[i] & mask == 0 { // Use the mask to split all nums into 2 groups
+			a ^= nums[i]
+		} else {
+			b ^= nums[i]
+		}
+	}
+	return []int{a, b}
+}