目标c:生成括号中的问题



这是我最近遇到的问题。

给定n对圆括号,写一个函数生成所有形式良好的圆括号的组合。

例如,给定n = 3,解集为:

"((()))", "(()())", "(())()", "()(())", "()()()"
下面是我的代码:
- (void)generateParentheses:(int)n{
  for (int i = 1; i <= n; i++) {
    [self generateParentheses:@"" open:0 close:0 pairs:i];
  }
}
- (void)generateParentheses:(NSString *)output open:(int)open close:(int)close pairs:(int)pairs{
if ((open == pairs) && (close == pairs)) {
    NSLog(@"%@",output);
}
else {
    if (open < pairs) {
        output = [output stringByAppendingString:@"("];
        [self generateParentheses:output open:open+1 close:close pairs:pairs];
    }
    
    if (close < open) {
        output = [output stringByAppendingString:@")"];
        [self generateParentheses:output open:open close:close+1 pairs:pairs];
    }
  }
}

是n =2

时的结果
()
(())
(()()

当n = 3时,存在大量的非格式圆括号。当我使用调试时,我发现当open=1,close =0时,输出是@"((")。它很惊讶,我不知道为什么。为什么不是@"("

如果函数中有open < pairsclose < open,则在第一个条件表达式中修改output(在到达第二个条件表达式之前添加"("))

要解决这个问题,只需去掉对output的赋值,并将[output stringByAppendingString:@"("]直接放在方法调用中。

最新更新