Episode 7 — DSA with JavaScript / 7.15 — Recursion and Backtracking
7.15.a — Advanced Recursion & Backtracking
Recursion recap
function f(n):
if base case → return
solve smaller sub-problem
combine results
Call stack:
f(4) → f(3) → f(2) → f(1) → return
← return
← return
← return
← return
Backtracking
Backtracking = recursion + undo choices that don't lead to a solution.
Decision tree for subsets of [1, 2, 3]:
[]
/ \
[1] []
/ \ / \
[1,2] [1] [2] []
/ \ / \ / \ / \
[1,2,3][1,2][1,3][1][2,3][2][3][]
N-Queens Problem
Place N queens on N×N board so no two attack each other.
N=4 solution:
. Q . .
. . . Q
Q . . .
. . Q .
function solveNQueens(n) {
const result = [];
const board = Array.from({length: n}, () => Array(n).fill('.'));
function isSafe(row, col) {
for (let i = 0; i < row; i++) if (board[i][col] === 'Q') return false;
for (let i = row-1, j = col-1; i >= 0 && j >= 0; i--, j--)
if (board[i][j] === 'Q') return false;
for (let i = row-1, j = col+1; i >= 0 && j < n; i--, j++)
if (board[i][j] === 'Q') return false;
return true;
}
function solve(row) {
if (row === n) { result.push(board.map(r => r.join(''))); return; }
for (let col = 0; col < n; col++) {
if (isSafe(row, col)) {
board[row][col] = 'Q';
solve(row + 1);
board[row][col] = '.'; // backtrack
}
}
}
solve(0);
return result;
}
class Solution {
vector<vector<string>> result;
void solve(vector<string>& board, int row, int n) {
if (row == n) { result.push_back(board); return; }
for (int col = 0; col < n; col++) {
if (isSafe(board, row, col, n)) {
board[row][col] = 'Q';
solve(board, row + 1, n);
board[row][col] = '.';
}
}
}
bool isSafe(vector<string>& b, int r, int c, int n) {
for (int i = 0; i < r; i++) if (b[i][c] == 'Q') return false;
for (int i=r-1,j=c-1; i>=0&&j>=0; i--,j--) if (b[i][j]=='Q') return false;
for (int i=r-1,j=c+1; i>=0&&j<n; i--,j++) if (b[i][j]=='Q') return false;
return true;
}
public:
vector<vector<string>> solveNQueens(int n) {
vector<string> board(n, string(n, '.'));
solve(board, 0, n);
return result;
}
};
Sudoku Solver
function solveSudoku(board) {
function isValid(board, row, col, num) {
for (let i = 0; i < 9; i++) {
if (board[row][i] === num) return false;
if (board[i][col] === num) return false;
const r = 3 * Math.floor(row/3) + Math.floor(i/3);
const c = 3 * Math.floor(col/3) + (i % 3);
if (board[r][c] === num) return false;
}
return true;
}
function solve() {
for (let r = 0; r < 9; r++) {
for (let c = 0; c < 9; c++) {
if (board[r][c] === '.') {
for (let num = 1; num <= 9; num++) {
const ch = String(num);
if (isValid(board, r, c, ch)) {
board[r][c] = ch;
if (solve()) return true;
board[r][c] = '.'; // backtrack
}
}
return false;
}
}
}
return true;
}
solve();
}
Subset Sum
function subsetSum(nums, target) {
const result = [];
function backtrack(start, current, remaining) {
if (remaining === 0) { result.push([...current]); return; }
if (remaining < 0) return;
for (let i = start; i < nums.length; i++) {
current.push(nums[i]);
backtrack(i + 1, current, remaining - nums[i]);
current.pop(); // backtrack
}
}
backtrack(0, [], target);
return result;
}
Word Search
function exist(board, word) {
const rows = board.length, cols = board[0].length;
function dfs(r, c, idx) {
if (idx === word.length) return true;
if (r < 0 || r >= rows || c < 0 || c >= cols) return false;
if (board[r][c] !== word[idx]) return false;
const temp = board[r][c];
board[r][c] = '#'; // mark visited
const found = dfs(r+1,c,idx+1) || dfs(r-1,c,idx+1) ||
dfs(r,c+1,idx+1) || dfs(r,c-1,idx+1);
board[r][c] = temp; // backtrack
return found;
}
for (let r = 0; r < rows; r++)
for (let c = 0; c < cols; c++)
if (dfs(r, c, 0)) return true;
return false;
}
Generate all permutations
function permute(nums) {
const result = [];
function backtrack(current, remaining) {
if (!remaining.length) { result.push([...current]); return; }
for (let i = 0; i < remaining.length; i++) {
current.push(remaining[i]);
backtrack(current, [...remaining.slice(0,i), ...remaining.slice(i+1)]);
current.pop();
}
}
backtrack([], nums);
return result;
}
Optimizing with pruning
Without pruning: Explore ALL branches
With pruning: Skip branches that can't lead to valid solutions
Key strategies:
1. Sort input → skip duplicates
2. Track constraints → stop early if impossible
3. Use visited set → avoid cycles
Scenario bank (recursion & backtracking)
7.15a-001 — Generate all subsets (v1)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-002 — Generate all combinations of size K (v2)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-003 — Combination sum (allow repeats) (v3)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-004 — Combination sum (no repeats) (v4)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-005 — Letter combinations of phone number (v5)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-006 — Palindrome partitioning (v6)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-007 — Restore IP addresses (v7)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-008 — Generate parentheses (v8)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-009 — Rat in a maze (v9)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-010 — Knight's tour (v10)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-011 — Hamiltonian path (v11)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-012 — Graph coloring (v12)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-013 — Crossword puzzle solver (v13)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-014 — Expression add operators (v14)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-015 — Word break (backtracking) (v15)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-016 — Partition to K equal sum subsets (v16)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-017 — Tiling problem (v17)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-018 — Unique paths with obstacles (recursive) (v18)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-019 — Target sum (assign +/-) (v19)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-020 — Permutations with duplicates (v20)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-021 — Generate all subsets (v21)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-022 — Generate all combinations of size K (v22)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-023 — Combination sum (allow repeats) (v23)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-024 — Combination sum (no repeats) (v24)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-025 — Letter combinations of phone number (v25)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-026 — Palindrome partitioning (v26)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-027 — Restore IP addresses (v27)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-028 — Generate parentheses (v28)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-029 — Rat in a maze (v29)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-030 — Knight's tour (v30)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-031 — Hamiltonian path (v31)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-032 — Graph coloring (v32)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-033 — Crossword puzzle solver (v33)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-034 — Expression add operators (v34)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-035 — Word break (backtracking) (v35)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-036 — Partition to K equal sum subsets (v36)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-037 — Tiling problem (v37)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-038 — Unique paths with obstacles (recursive) (v38)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-039 — Target sum (assign +/-) (v39)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-040 — Permutations with duplicates (v40)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-041 — Generate all subsets (v41)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-042 — Generate all combinations of size K (v42)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-043 — Combination sum (allow repeats) (v43)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-044 — Combination sum (no repeats) (v44)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-045 — Letter combinations of phone number (v45)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-046 — Palindrome partitioning (v46)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-047 — Restore IP addresses (v47)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-048 — Generate parentheses (v48)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-049 — Rat in a maze (v49)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-050 — Knight's tour (v50)
- Level: Beginner
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-051 — Hamiltonian path (v51)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-052 — Graph coloring (v52)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-053 — Crossword puzzle solver (v53)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-054 — Expression add operators (v54)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-055 — Word break (backtracking) (v55)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-056 — Partition to K equal sum subsets (v56)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-057 — Tiling problem (v57)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-058 — Unique paths with obstacles (recursive) (v58)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-059 — Target sum (assign +/-) (v59)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-060 — Permutations with duplicates (v60)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-061 — Generate all subsets (v61)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-062 — Generate all combinations of size K (v62)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-063 — Combination sum (allow repeats) (v63)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-064 — Combination sum (no repeats) (v64)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-065 — Letter combinations of phone number (v65)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-066 — Palindrome partitioning (v66)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-067 — Restore IP addresses (v67)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-068 — Generate parentheses (v68)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-069 — Rat in a maze (v69)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-070 — Knight's tour (v70)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-071 — Hamiltonian path (v71)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-072 — Graph coloring (v72)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-073 — Crossword puzzle solver (v73)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-074 — Expression add operators (v74)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-075 — Word break (backtracking) (v75)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-076 — Partition to K equal sum subsets (v76)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-077 — Tiling problem (v77)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-078 — Unique paths with obstacles (recursive) (v78)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-079 — Target sum (assign +/-) (v79)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-080 — Permutations with duplicates (v80)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-081 — Generate all subsets (v81)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-082 — Generate all combinations of size K (v82)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-083 — Combination sum (allow repeats) (v83)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-084 — Combination sum (no repeats) (v84)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-085 — Letter combinations of phone number (v85)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-086 — Palindrome partitioning (v86)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-087 — Restore IP addresses (v87)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-088 — Generate parentheses (v88)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-089 — Rat in a maze (v89)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-090 — Knight's tour (v90)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-091 — Hamiltonian path (v91)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-092 — Graph coloring (v92)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-093 — Crossword puzzle solver (v93)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-094 — Expression add operators (v94)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-095 — Word break (backtracking) (v95)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-096 — Partition to K equal sum subsets (v96)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-097 — Tiling problem (v97)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-098 — Unique paths with obstacles (recursive) (v98)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-099 — Target sum (assign +/-) (v99)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-100 — Permutations with duplicates (v100)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-101 — Generate all subsets (v101)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-102 — Generate all combinations of size K (v102)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-103 — Combination sum (allow repeats) (v103)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-104 — Combination sum (no repeats) (v104)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-105 — Letter combinations of phone number (v105)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-106 — Palindrome partitioning (v106)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-107 — Restore IP addresses (v107)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-108 — Generate parentheses (v108)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-109 — Rat in a maze (v109)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-110 — Knight's tour (v110)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-111 — Hamiltonian path (v111)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-112 — Graph coloring (v112)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-113 — Crossword puzzle solver (v113)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-114 — Expression add operators (v114)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-115 — Word break (backtracking) (v115)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-116 — Partition to K equal sum subsets (v116)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-117 — Tiling problem (v117)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-118 — Unique paths with obstacles (recursive) (v118)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-119 — Target sum (assign +/-) (v119)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-120 — Permutations with duplicates (v120)
- Level: Intermediate
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-121 — Generate all subsets (v121)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-122 — Generate all combinations of size K (v122)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-123 — Combination sum (allow repeats) (v123)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-124 — Combination sum (no repeats) (v124)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-125 — Letter combinations of phone number (v125)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-126 — Palindrome partitioning (v126)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-127 — Restore IP addresses (v127)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-128 — Generate parentheses (v128)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-129 — Rat in a maze (v129)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-130 — Knight's tour (v130)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-131 — Hamiltonian path (v131)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-132 — Graph coloring (v132)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-133 — Crossword puzzle solver (v133)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-134 — Expression add operators (v134)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-135 — Word break (backtracking) (v135)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-136 — Partition to K equal sum subsets (v136)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-137 — Tiling problem (v137)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-138 — Unique paths with obstacles (recursive) (v138)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-139 — Target sum (assign +/-) (v139)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-140 — Permutations with duplicates (v140)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-141 — Generate all subsets (v141)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-142 — Generate all combinations of size K (v142)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-143 — Combination sum (allow repeats) (v143)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-144 — Combination sum (no repeats) (v144)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-145 — Letter combinations of phone number (v145)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-146 — Palindrome partitioning (v146)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-147 — Restore IP addresses (v147)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-148 — Generate parentheses (v148)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-149 — Rat in a maze (v149)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-150 — Knight's tour (v150)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-151 — Hamiltonian path (v151)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-152 — Graph coloring (v152)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-153 — Crossword puzzle solver (v153)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-154 — Expression add operators (v154)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-155 — Word break (backtracking) (v155)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-156 — Partition to K equal sum subsets (v156)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-157 — Tiling problem (v157)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-158 — Unique paths with obstacles (recursive) (v158)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-159 — Target sum (assign +/-) (v159)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-160 — Permutations with duplicates (v160)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-161 — Generate all subsets (v161)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-162 — Generate all combinations of size K (v162)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-163 — Combination sum (allow repeats) (v163)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-164 — Combination sum (no repeats) (v164)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-165 — Letter combinations of phone number (v165)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-166 — Palindrome partitioning (v166)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-167 — Restore IP addresses (v167)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-168 — Generate parentheses (v168)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-169 — Rat in a maze (v169)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.
7.15a-170 — Knight's tour (v170)
- Level: Advanced
- Approach: Apply technique.
- Time/Space: Analyze.
- Edge cases: empty, single, boundary.
- JS & C++: Both.