我有一个递归函数,它打印所有平衡括号的有效组合,如下所示:
function addParen(upstock, downstock, sa)
{
if (upstock == 0 && downstock == 0)
{
Print(sa);
}
if (upstock > 0)
{
addParen(upstock - 1, downstock + 1, sa + "(");
}
if (downstock > 0)
{
addParen(upstock, downstock - 1, sa + ")");
}
}
对于n = 3,它直接将结果打印为“((()))”或“()()()”之类的字符串(我们假设3对,对的数量并不重要)。但是,每当初始空字符串与“(”或“)”连接时,我希望我的递归函数逐个打印每个括号。例如,对于第一个组合,我希望它打印像“(”then“(”then“) (“然后”)“然后”)“然后”)“。然后它可以以相同的方式进行第二次组合。是否可以这样做?
答案 0 :(得分:0)
希望这是你正在寻找的东西!
function addParen( upstock, downstock ) {
if (upstock > 0 )
{
Print("(");
addParen(upstock - 1, downstock+1);
}
if (downstock > 0 )
{
Print(")");
addParen(upstock, downstock - 1);
}
}
答案 1 :(得分:0)
您的平衡括号不起作用,因为您需要进行另一次检查。贝娄我将结果与组合总数相对应。
function addParen(n, upstock, downstock, sa){
var count = 0;
if(sa.length == 2 * n && upstock == downstock){
console.log(sa);
//number of valid combinations
return 1;
}
if(upstock >= downstock && upstock <= n){
count += addParen(n, upstock + 1, downstock, sa + "(");
}
if(downstock < upstock){
count += addParen(n, upstock, downstock + 1, sa + ")");
}
return count;
}
function numberOfBalancedParenthesis(n){
return addParen(n, 0, 0, "");
}
//try this on the console
numberOfBalancedParenthesis(2)