Printing Subsequences - Notes (Final)
What is a Subsequence?
A subsequence is formed by taking or not taking elements without changing order.
Example: [1,2,3] → [], [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]
Total = 2^n
Core Idea
At each index, we have two choices:
1. Take the element
2. Do not take the element
Template Code
def printsubseq(i, n, arr):
if i >= n:
print(arr)
return
[Link](nums[i])
printsubseq(i + 1, n, arr)
[Link]()
printsubseq(i + 1, n, arr)
nums = [1, 2, 3]
printsubseq(0, len(nums), [])
Time Complexity
O(2^n * n)
Space Complexity
O(n)
Stop After Printing First Valid Subsequence (Functional Recursion)
Return boolean to stop recursion early.
def printOneSubseq(i, n, arr):
if i >= n:
print(arr)
return True
else:
# take
[Link](nums[i])
if printOneSubseq(i + 1, n, arr):
return True
# backtrack
[Link]()
# not take
if printOneSubseq(i + 1, n, arr):
return True
return False
nums = [1, 2, 3]
printOneSubseq(0, len(nums), [])
Key Idea: Use boolean return to stop recursion once first subsequence is printed.