Interactive visualization of parentheses generation algorithms
( if open < n, add ) if close < open. When length reaches 2n, we found a valid combination. Time: O(4^n / sqrt(n))
i pairs = "(" + dp[j] + ")" + dp[i-1-j]" for all j from 0 to i-1. Time: O(4^n / sqrt(n))