Skip to content

Commit 2dff60a

Browse files
committed
feat: add detailed backtracking example in comments for combinationSum function
1 parent e3d9010 commit 2dff60a

File tree

2 files changed

+87
-6
lines changed

2 files changed

+87
-6
lines changed

β€Žcombination-sum/hongseoupyun.pyβ€Ž

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,49 @@
2020
# // Hence, if we starts from 2, next dfs calls can start from index of 2 or index of 3, but not index of 5 directly
2121
# // Moreover, if we start from 3, next dfs calls can start from index of 3 or index of 5, but not index of 2 directly
2222

23+
# backtrack(8, [], 0)
24+
# β”‚
25+
# β”œβ”€ i = 0 pick 2 β†’ backtrack(6, [2], 0)
26+
# β”‚ β”‚
27+
# β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(4, [2,2], 0)
28+
# β”‚ β”‚ β”‚
29+
# β”‚ β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(2, [2,2,2], 0)
30+
# β”‚ β”‚ β”‚ β”‚
31+
# β”‚ β”‚ β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(0, [2,2,2,2], 0) 🟒 success β†’ return
32+
# β”‚ β”‚ β”‚ β”‚
33+
# β”‚ β”‚ β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(-1, [2,2,2,3], 1) πŸ”΄ β†’ return
34+
# β”‚ β”‚ β”‚ β”‚
35+
# β”‚ β”‚ β”‚ └─ i = 2 pick 5 β†’ backtrack(-3, [2,2,2,5], 2) πŸ”΄ β†’ return
36+
# β”‚ β”‚ β”‚
37+
# β”‚ β”‚ └─ loop end β†’ pop β†’ combination = [2,2]
38+
# β”‚ β”‚
39+
# β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(1, [2,2,3], 1)
40+
# β”‚ β”‚ β”‚
41+
# β”‚ β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(0, [2,2,3,3], 1) 🟒 success β†’ return
42+
# β”‚ β”‚ β”‚
43+
# β”‚ β”‚ └─ i = 2 pick 5 β†’ backtrack(-4, [2,2,3,5], 2) πŸ”΄ β†’ return
44+
# β”‚ β”‚
45+
# β”‚ β”œβ”€ loop end β†’ pop β†’ [2,2]
46+
# β”‚ β”‚
47+
# β”‚ └─ i = 2 pick 5 β†’ backtrack(-1, [2,2,5], 2) πŸ”΄ β†’ return
48+
# β”‚
49+
# β”œβ”€ loop end β†’ pop β†’ [2]
50+
# β”‚
51+
# β”œβ”€ i = 1 pick 3 β†’ backtrack(3, [2,3], 1)
52+
# β”‚ β”‚
53+
# β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(0, [2,3,3], 1) 🟒 success β†’ return
54+
# β”‚ β”‚
55+
# β”‚ └─ i = 2 pick 5 β†’ backtrack(-2, [2,3,5], 2) πŸ”΄ β†’ return
56+
# β”‚
57+
# β”œβ”€ loop end β†’ pop β†’ [2]
58+
# β”‚
59+
# β”œβ”€ i = 2 pick 5 β†’ backtrack(1, [2,5], 2)
60+
# β”‚ β”‚
61+
# β”‚ └─ i = 2 pick 5 β†’ backtrack(-4, [2,5,5], 2) πŸ”΄ β†’ return
62+
# β”‚
63+
# └─ loop end β†’ pop β†’ []
64+
65+
2366

2467

2568
from typing import List
@@ -50,9 +93,3 @@ def backtrack(remaining: int, combination: List[int], start_index: int):
5093
# initial call
5194
backtrack(target, [], 0)
5295
return result
53-
54-
55-
56-
57-
58-

β€Žcombination-sum/hongseoupyun.tsβ€Ž

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,50 @@
2020
// Hence, if we starts from 2, next dfs calls can start from index of 2 or index of 3, but not index of 5 directly
2121
// Moreover, if we start from 3, next dfs calls can start from index of 3 or index of 5, but not index of 2 directly
2222

23+
/*
24+
backtrack(8, [], 0)
25+
β”‚
26+
β”œβ”€ i = 0 pick 2 β†’ backtrack(6, [2], 0)
27+
β”‚ β”‚
28+
β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(4, [2,2], 0)
29+
β”‚ β”‚ β”‚
30+
β”‚ β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(2, [2,2,2], 0)
31+
β”‚ β”‚ β”‚ β”‚
32+
β”‚ β”‚ β”‚ β”œβ”€ i = 0 pick 2 β†’ backtrack(0, [2,2,2,2], 0) 🟒 success β†’ return
33+
β”‚ β”‚ β”‚ β”‚
34+
β”‚ β”‚ β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(-1, [2,2,2,3], 1) πŸ”΄ β†’ return
35+
β”‚ β”‚ β”‚ β”‚
36+
β”‚ β”‚ β”‚ └─ i = 2 pick 5 β†’ backtrack(-3, [2,2,2,5], 2) πŸ”΄ β†’ return
37+
β”‚ β”‚ β”‚
38+
β”‚ β”‚ └─ loop end β†’ pop β†’ combination = [2,2]
39+
β”‚ β”‚
40+
β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(1, [2,2,3], 1)
41+
β”‚ β”‚ β”‚
42+
β”‚ β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(0, [2,2,3,3], 1) 🟒 success β†’ return
43+
β”‚ β”‚ β”‚
44+
β”‚ β”‚ └─ i = 2 pick 5 β†’ backtrack(-4, [2,2,3,5], 2) πŸ”΄ β†’ return
45+
β”‚ β”‚
46+
β”‚ β”œβ”€ loop end β†’ pop β†’ [2,2]
47+
β”‚ β”‚
48+
β”‚ └─ i = 2 pick 5 β†’ backtrack(-1, [2,2,5], 2) πŸ”΄ β†’ return
49+
β”‚
50+
β”œβ”€ loop end β†’ pop β†’ [2]
51+
β”‚
52+
β”œβ”€ i = 1 pick 3 β†’ backtrack(3, [2,3], 1)
53+
β”‚ β”‚
54+
β”‚ β”œβ”€ i = 1 pick 3 β†’ backtrack(0, [2,3,3], 1) 🟒 success β†’ return
55+
β”‚ β”‚
56+
β”‚ └─ i = 2 pick 5 β†’ backtrack(-2, [2,3,5], 2) πŸ”΄ β†’ return
57+
β”‚
58+
β”œβ”€ loop end β†’ pop β†’ [2]
59+
β”‚
60+
β”œβ”€ i = 2 pick 5 β†’ backtrack(1, [2,5], 2)
61+
β”‚ β”‚
62+
β”‚ └─ i = 2 pick 5 β†’ backtrack(-4, [2,5,5], 2) πŸ”΄ β†’ return
63+
β”‚
64+
└─ loop end β†’ pop β†’ []
65+
*/
66+
2367

2468
function combinationSum(candidates: number[], target: number): number[][] {
2569
const result: number[][] = []

0 commit comments

Comments
Β (0)