当前位置:网站首页>Leetcode backtracking method
Leetcode backtracking method
2022-07-05 06:13:00 【Dawnlighttt】
List of articles
q22 Bracket generation
Answer key
Let's solve this problem in a different way , The topic requires to use n Arrange brackets , We are from 2 * n Choose between the brackets to arrange them from left to right . At this time, we found out , We have chosen more left parentheses than right parentheses , such as "((("、"(()"、"(())“ Such a situation is allowed , however ”())" Such a situation cannot happen . So we made such a strategy at the beginning :
- As long as the left bracket always has , Then you can always choose the left bracket
- As long as the number of left parentheses is greater than the number of right parentheses , We can choose the right bracket
- When the number of parentheses equals 2 * n, Indicates that an arrangement has been obtained
func generateParenthesis(n int) []string {
res := []string{
}
var dfs func(lBracket int, rBracket int, path string)
dfs = func(lBracket int, rBracket int, path string){
if len(path) >= 2 * n {
res = append(res, path)
return
}
if lBracket > 0 {
dfs(lBracket - 1, rBracket, path + "(")
}
if rBracket > lBracket {
dfs(lBracket, rBracket - 1, path + ")")
}
}
dfs(n, n, "")
return res
}
q40 Combinatorial summation 2
Answer key
This problem uses dfs To solve , First, clarify the situation of reaching the leaf node , Is that when target Be reduced to 0 When , Then go through candidates The subscript , To create a new branch , And subscript as dfs Function parameters to pass parameters . At the same time, weight removal and pruning are needed , When the present candidates When the element of is the same as the previous element , Just skip this loop ; When the currently traversed element ratio target When I was young , Because the array has been ordered , So direct return that will do , Finally, continue recursion along this node .
func combinationSum2(candidates []int, target int) [][]int {
sort.Ints(candidates)
var res [][]int
dfs(candidates, nil, target, 0, &res)
return res
}
func dfs(candidates []int, nums []int, target int, left int, res *[][]int) {
// Recursive export
if target == 0 {
tmp := make([]int, len(nums))
copy(tmp, nums)
*res = append(*res, tmp)
return
}
for i := left; i < len(candidates); i++ {
if i != left && candidates[i] == candidates[i - 1] {
// duplicate removal
continue
}
if target < candidates[i] {
// prune
return
}
// Direct transmission append(nums, candidates[i]) In fact, it includes the backtracking operation ,nums The array has not been changed
dfs(candidates, append(nums, candidates[i]), target - candidates[i], i + 1, res)
}
}
q46 Full Permutation
Answer key
This problem uses dfs To solve , The condition for judging leaf nodes is cur The length of the array and nums The length is the same , At this time cur Array add res Array . Then traverse nums Array to select numbers , To create a new branch , Inside a loop, you need to traverse cur Array , See if the selected number repeats , No problem, just continue along this branch .
func permute(nums []int) [][]int {
var res [][]int
dfs(nums, []int{
}, &res)
return res
}
func dfs(nums []int, cur []int, res *[][]int) {
if len(nums) == len(cur) {
tmp := make([]int, len(cur))
copy(tmp, cur)
*res = append(*res, tmp)
return
}
for i := 0; i < len(nums); i++ {
exist := false
for j := 0; j < len(cur); j++ {
if nums[i] == cur[j] {
exist = true
break
}
}
if exist == true {
continue
}
dfs(nums, append(cur, nums[i]), res)
}
}
边栏推荐
- 【Rust 笔记】17-并发(下)
- On the characteristics of technology entrepreneurs from Dijkstra's Turing Award speech
- Daily question 2006 Number of pairs whose absolute value of difference is k
- TypeScript 基础讲解
- 对for(var i = 0;i < 5;i++) {setTimeout(() => console.log(i),1000)}的深入分析
- Erreur de connexion Navicat à la base de données Oracle Ora - 28547 ou Ora - 03135
- 1040 Longest Symmetric String
- Leetcode-1200: minimum absolute difference
- 【Rust 笔记】17-并发(上)
- MIT-6874-Deep Learning in the Life Sciences Week 7
猜你喜欢

1.14 - 流水线

MySQL advanced part 1: index

Open source storage is so popular, why do we insist on self-development?

Solution to game 10 of the personal field

Leetcode-6108: decrypt messages

Sqlmap tutorial (II) practical skills I

实时时钟 (RTC)

MatrixDB v4.5.0 重磅发布,全新推出 MARS2 存储引擎!

On the characteristics of technology entrepreneurs from Dijkstra's Turing Award speech

SQLMAP使用教程(二)实战技巧一
随机推荐
一些工具的记录2022
Leetcode-556: the next larger element III
A reason that is easy to be ignored when the printer is offline
Introduction to LVS [unfinished (semi-finished products)]
7. Processing the input of multidimensional features
【Rust 笔记】17-并发(上)
leetcode-31:下一个排列
leetcode-556:下一个更大元素 III
Data visualization chart summary (I)
1.15 - 输入输出系统
leetcode-22:括号生成
Daily question 1342 Number of operations to change the number to 0
Typical use cases for knapsacks, queues, and stacks
Flutter Web 硬件键盘监听
2022年貴州省職業院校技能大賽中職組網絡安全賽項規程
Leetcode array operation
leetcode-6110:网格图中递增路径的数目
Leetcode heap correlation
Quickly use Amazon memorydb and build your own redis memory database
[rust notes] 15 string and text (Part 1)