40 lines
792 B
Ruby
40 lines
792 B
Ruby
# Naive bruteforce solution
|
|
|
|
# @param {Integer} n
|
|
# @return {String[]}
|
|
def generate_parenthesis(n)
|
|
combinations = ['(']
|
|
|
|
# Generate an array of all possible combinations
|
|
(2..n * 2).each do |i|
|
|
new_iteration = []
|
|
|
|
combinations.each do |elem|
|
|
new_iteration.push("#{elem})")
|
|
# Opening bracket can't be the last one
|
|
new_iteration.push("#{elem}(") if i != n * 2
|
|
end
|
|
|
|
combinations = new_iteration
|
|
end
|
|
|
|
# Return only valid combinations
|
|
combinations.select { |l| parenthesis_valid?(l) }
|
|
end
|
|
|
|
def parenthesis_valid?(s)
|
|
open_brackets = 0
|
|
|
|
s.each_char do |char|
|
|
if char == '('
|
|
open_brackets += 1
|
|
else
|
|
open_brackets -= 1
|
|
end
|
|
return false if open_brackets.negative?
|
|
end
|
|
|
|
return false if open_brackets.positive?
|
|
|
|
true
|
|
end
|