2015-08-27 2 views
0

Voici la question que j'ai récemment rencontrée. Je sais que cette question est vraiment ancienne, mais j'ai encore besoin d'un peu d'aide parce que je suis encore trop jeune.Objectif C: Problèmes de génération de parenthèses

ici est mon code

- (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]; 
    } 
    } 
} 

ici est le résultat lorsque n = 2

() 
(()) 
(()() 

lorsque n = 3, il y a beaucoup de parenthèses non bien formés. lorsque j'utilise le débogage, j'ai trouvé que lorsque open = 1, close = 0, la sortie est @ "((". Il a été surpris et je ne savais pas pourquoi. "("?

quelqu'un peut me aider un peu?

Répondre

1

Si open < pairs et close < open dans votre fonction, vous modifiez output dans la première expression conditionnelle (vous ajoutez « (») avant d'arriver à la seconde.

Pour fixer cela, il suffit de se débarrasser des affectations à output et mettre [output stringByAppendingString:@"("] directement dans l'appel de la méthode

+0

oh mon dieu !!!! vous avez 100% raison, merci beaucoup! – iceChao