Backtracking
Last updated
Last updated
Use cases:
Output all results. This must be backtracking, at most with memorization.
Find how many ways to do xyz. DP, a typical DFS + memorization pattern.
One important idea of Backtracking is modify -> restore
, like this one is different from traditional add, remove
List: 212. Word Search II
, tmp = board[r][c]; -> board[r][c] = '#'; -> board[r][c] = tmp;
Duplicate: 1) sort array/list first; 2) skip duplicate at each level by if (visiting[i] || i > 0 && nums[i] == nums[i-1] && !visiting[i-1]) continue;
Have a boolean[] visiting
to marked points visited, avoid duplicate
Duplicate: 1) sort array/list first; 2) skip duplicate at each level by if (i > start && candidates[i] == candidates[i-1]) continue;
Don't need to have visited set or boolean array
These are more of a DP:
0377. Combination Sum IV (This is more of a permutation where you can use an element repeatedly.)
https://leetcode.com/problems/partition-equal-subset-sum https://leetcode.com/problems/partition-to-k-equal-sum-subsets/description/
one common type is add -> remove. the other type is like drawing a tree, enumerate possible solutions https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/ https://leetcode.com/problems/generate-parentheses/description/ https://leetcode.com/problems/gray-code/description/
https://leetcode.com/problems/palindrome-partitioning/description/