ios - Objective-C:生成括号的问题

标签 ios objective-c algorithm

这是我最近遇到的问题。

Given n pairs of parentheses, write a function to generate all combinations of well-formed parentheses.

For example, given n = 3, a solution set is:

"((()))", "(()())", "(())()", "()(())", "()()()"

这是我的代码:

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

最佳答案

如果open < pairsclose < open在你的函数中,然后你修改 output在第一个条件表达式中(在到达第二个条件表达式之前附加“(”)。

要解决此问题,只需删除对 output 的分配即可然后放[output stringByAppendingString:@"("]直接在方法调用中。

关于ios - Objective-C:生成括号的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260510/

相关文章:

ios - 更改 UIView 约束高度带来其 subview 的约束警告

java - 如何使用位操作实现 Karatsuba 乘法

ios - 我如何使用 swift 从 View Controller 调用 Set Root View Controller?

算法复杂度和大 O 符号

java - 固定线程池和大量任务的线程问题

ios - 在 Swift 3 中使用音频队列获取麦克风输入

ios - 在通话或 Facetime session 中,尝试使用 SpeechRecognizer 会导致应用程序崩溃

ios - 关闭应用程序时不处理深度链接 React Native iOS 应用程序

ios - CATransform3DTranslate如何翻译?

ios - iOS 7 iphone 5 中的可达性响应错误的状态代码