1. Combination:

都是is开始,而Permutation都是i0开始

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
nums = [...]
ans = []

# C(m, n)
func dfs(n, s, cur):
if cur.size() == n:
ans.append(cur)
return

for i = s to nums.size():
cur.append(nums[i])
dfs(n, i + 1, cur)
cur.pop()

for i = 0 to nums.size():
dfs(i, 0, [])
  1. Permutation:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
nums = [...]
ans = []

used = [False] * nums.size()

# P(m, n)
func dfs(n, s, cur):
if cur.size() == n:
ans.append(cur)
return

for i = 0 to nums.size():
if used[i]: continue
used[i] = True

cur.append(nums[i])
dfs(n, i + 1, cur)
cur.pop()

used[i] = False

for i = 0 to nums.size():
dfs(i, 0, [])