Objective-C:生成括号的问题

时间:2015-08-27 22:33:18

标签: ios objective-c algorithm

这是我最近遇到的问题。

  

给定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时,有许多非格式正确的括号。 当我使用debug时,我发现当open = 1,close = 0时,输出为@“((”。它很惊讶,我不知道为什么。为什么不是@“(”?

1 个答案:

答案 0 :(得分:1)

如果您的函数中有open < pairsclose < open,那么您可以在第一个条件表达式中修改output(在到达第二个条件表达式之前附加“(”)。

要解决此问题,只需删除output的作业并将[output stringByAppendingString:@"("]直接放入方法调用中。