Added recursion solutions: Regular Expression Matching and N-Queens #522
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This Pull Request adds two hard-level recursion problems from LeetCode, implemented in C++ with clear explanations, optimized recursion logic, and tested outputs.
Problem Summary:
Implement regular expression matching with support for '.' (matches any single character) and '*' (matches zero or more of the preceding element).
Approach:
Used pure recursion to explore all matching possibilities.
Base condition checks if the pattern is empty.
If the next pattern character is *, recursively try two options:
Skip the * and its preceding character.
Use it if the first characters match.
Otherwise, recursively match the next substring and subpattern.
Complexity:
Time: Exponential (in worst case), can be optimized with DP.
Space: O(N) recursion stack.
Problem Summary:
Place n queens on an n×n chessboard such that no two queens attack each other.
Approach:
Implemented a recursive backtracking algorithm that places queens row by row:
At each row, try placing a queen in a valid column (not under attack).
Track columns and diagonals using three boolean arrays.
If all rows are filled successfully, store the board configuration.
Backtrack when conflicts occur.
Complexity:
Time: O(N!) (due to backtracking and branching at each row).
Space: O(N²) for the board and recursion depth.