【问题标题】:Objective-C: Problems in Generating ParenthesesObjective-C:生成括号的问题
【发布时间】:2019-01-28 15:25:31
【问题描述】:

这是我最近遇到的问题。

给定 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的时候,输出是@"(("。很惊讶,不知道为什么。为什么不是@"("?

【问题讨论】:

    标签: ios objective-c algorithm


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-12
      • 2019-02-26
      • 2013-10-05
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多