当前位置:网站首页>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)
}
}
边栏推荐
- Introduction et expérience de wazuh open source host Security Solution
- Leetcode-6110: number of incremental paths in the grid graph
- [rust notes] 17 concurrent (Part 2)
- QT判断界面当前点击的按钮和当前鼠标坐标
- Leetcode-6108: decrypt messages
- RGB LED infinite mirror controlled by Arduino
- In depth analysis of for (VaR I = 0; I < 5; i++) {settimeout (() => console.log (I), 1000)}
- LaMDA 不可能觉醒吗?
- Leetcode-6111: spiral matrix IV
- 【Rust 笔记】14-集合(下)
猜你喜欢

QQ电脑版取消转义符输入表情

Typical use cases for knapsacks, queues, and stacks

Matrixdb V4.5.0 was launched with a new mars2 storage engine!
![[cloud native] record of feign custom configuration of microservices](/img/39/05cf7673155954c90e75a8a2eecd96.jpg)
[cloud native] record of feign custom configuration of microservices

开源存储这么香,为何我们还要坚持自研?

LVS简介【暂未完成(半成品)】

leetcode-6111:螺旋矩阵 IV

liunx启动redis

Leetcode-6111: spiral matrix IV

wordpress切换页面,域名变回了IP地址
随机推荐
实时时钟 (RTC)
liunx启动redis
2022年贵州省职业院校技能大赛中职组网络安全赛项规程
leetcode-3:无重复字符的最长子串
leetcode-556:下一个更大元素 III
Simply sort out the types of sockets
Implement an iterative stack
Shutter web hardware keyboard monitoring
【Rust 笔记】14-集合(上)
快速使用Amazon MemoryDB并构建你专属的Redis内存数据库
The difference between CPU core and logical processor
Solution to game 10 of the personal field
SQLMAP使用教程(一)
Daily question 2006 Number of pairs whose absolute value of difference is k
leetcode-31:下一个排列
RGB LED infinite mirror controlled by Arduino
Is it impossible for lamda to wake up?
Leetcode stack related
开源存储这么香,为何我们还要坚持自研?
QT判断界面当前点击的按钮和当前鼠标坐标