第一,本题对于分支的控制,是通过两个 recursion(),不同于前面是通过循环i的变换来确定是那一层的。
第二,核心在于判断条件左括号随便摆,只要右括号数量小于(最终等于)左括号就一定是一种解。
所以说左括号数量小于等于n,放心的加入(,右括号数量不大于左括号数量时,加入)。当左右数量均等于n时,就是一种姐
//使用一次左括号
if(left < n){
recursion(left + 1, right, temp + "(", res, n);
}
//使用右括号个数必须少于左括号,
if(right < n && left > right){
recursion(left, right + 1, temp + ")", res, n);
}