dengxinyi 6 anos atrás
pai
commit
e83a44af1b

+ 42 - 0
hard/301.remove-invalid-parentheses.go

@@ -0,0 +1,42 @@
+var empty struct{} = struct{}{}
+
+func removeInvalidParentheses(s string) (res []string) {
+	l, r := 0, 0
+	for _, c := range s {
+		if c == '(' {
+			l++
+		} else if c == ')' {
+			if l == 0 {
+				r++
+			} else {
+				l--
+			}
+		}
+	}
+	set := make(map[string]struct{})
+	dfs(&set, s, []byte{}, 0, l, r, 0)
+	for k, _ := range set {
+		res = append(res, k)
+	}
+	return
+}
+
+func dfs(set *map[string]struct{}, s string, pre []byte, pos, l, r, cnt int) {
+	n := len(s)
+	if pos == n && l == 0 && r == 0 && cnt == 0 {
+		(*set)[string(pre)] = empty
+		return
+	} else if cnt < 0 || l < 0 || r < 0 || pos == n {
+		return
+	}
+	if s[pos] == '(' {
+		dfs(set, s, pre, pos+1, l-1, r, cnt) // Delete '('
+		dfs(set, s, append(pre, '('), pos+1, l, r, cnt+1)
+	} else if s[pos] == ')' {
+		dfs(set, s, pre, pos+1, l, r-1, cnt) // Delete ')'
+		dfs(set, s, append(pre, ')'), pos+1, l, r, cnt-1)
+	} else {
+		dfs(set, s, append(pre, s[pos]), pos+1, l, r, cnt)
+	}
+}
+

+ 21 - 0
hard/312.burst-balloons.go

@@ -0,0 +1,21 @@
+func maxCoins(nums []int) int {
+	n := len(nums) + 2
+	arr := make([]int, n)
+	copy(arr[1:], nums)
+	arr[0], arr[n-1] = 1, 1
+	dp := make([][]int, n)
+	for i := 0; i < n; i++ {
+		dp[i] = make([]int, n)
+	} // dp[l][r] means the maximum coins one can get from (l, r) (l, r not included)
+	for k := 2; k < n; k++ {
+		for l := 0; l < n-k; l++ {
+			r := l + k
+			for i := l + 1; i < r; i++ {
+				if coins := arr[l]*arr[i]*arr[r] + dp[l][i] + dp[i][r]; dp[l][r] < coins {
+					dp[l][r] = coins
+				}
+			}
+		}
+	}
+	return dp[0][n-1]
+}

+ 4 - 0
hard/315.count-of-smaller-numbers-after-self.go

@@ -0,0 +1,4 @@
+func countSmaller(nums []int) []int {
+	n := len(nums)
+	if n 
+}