How can I print out all possible letter combinations a given phone number can represent?

前端 未结 30 2188
逝去的感伤
逝去的感伤 2020-12-22 18:01

I just tried for my first programming interview and one of the questions was to write a program that given a 7 digit telephone number, could print all possible combinations

30条回答
  •  攒了一身酷
    2020-12-22 18:40

    One option in Objective-C:

    - (NSArray *)lettersForNumber:(NSNumber *)number {
        switch ([number intValue]) {
            case 2:
                return @[@"A",@"B",@"C"];
            case 3:
                return @[@"D",@"E",@"F"];
            case 4:
                return @[@"G",@"H",@"I"];
            case 5:
                return @[@"J",@"K",@"L"];
            case 6:
                return @[@"M",@"N",@"O"];
            case 7:
                return @[@"P",@"Q",@"R",@"S"];
            case 8:
                return @[@"T",@"U",@"V"];
            case 9:
                return @[@"W",@"X",@"Y",@"Z"];
            default:
                return nil;
        }
    }
    
    - (NSArray *)letterCombinationsForNumbers:(NSArray *)numbers {
        NSMutableArray *combinations = [[NSMutableArray alloc] initWithObjects:@"", nil];
    
        for (NSNumber *number in numbers) {
            NSArray *lettersNumber = [self lettersForNumber:number];
    
            //Ignore numbers that don't have associated letters
            if (lettersNumber.count == 0) {
                continue;
            }
    
            NSMutableArray *currentCombinations = [combinations mutableCopy];
            combinations = [[NSMutableArray alloc] init];
    
            for (NSString *letter in lettersNumber) {
    
                for (NSString *letterInResult in currentCombinations) {
    
                    NSString *newString = [NSString stringWithFormat:@"%@%@", letterInResult, letter];
                    [combinations addObject:newString];
                }
            }
        }
    
        return combinations;
    }
    

提交回复
热议问题