力扣题目学习笔记(OC + Swift)17. 电话号码的字母组合

17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
在这里插入图片描述

关键字:所有组合
模式识别:搜索算法

解题思路:
自顶向下的递归实现深度搜索
定义子问题
在当前递归层结合子问题解决原问题

Swift

func letterCombinations(_ digits: String) -> [String] {
   
        guard !digits.isEmpty else {
    return [] }
        
        let phoneMap:[Character : String] = [
            "2": "abc", "3": "def", "4": "ghi", "5": "jkl",
            "6": "mno", "7": "pqrs", "8": "tuv", "9": "wxyz"
        ]
        
        var combinations:[String] = [String]();
        var combination:String = ""
        
        //回朔法,
        func backTrack(_ index:Int) {
   
            if index == digits.count {
   
                combinations.append(combination)
            }else {
   
                let digit = digits[digits.index(digits.startIndex, offsetBy: index)]
                if let letters = phoneMap[digit] {
   
                    for letter in letters {
   
                        combination.append(letter)
                        backTrack(index+1)
                        combination.removeLast()
                    }
                }
            }
        }
        
        backTrack(0)
        
        return combinations
    }

OC

//深度优先遍历
- (NSArray *)letterCombinations:(NSString *)digits {
   
    if (digits.length == 0) {
   
        return @[];
    }
    
    NSDictionary *phoneMap = @{
   
        @"2": @"abc", @"3": @"def", @"4": @"ghi", @"5": @"jkl",
        @"6": @"mno", @"7": @"pqrs", @"8": @"tuv", @"9": @"wxyz"
    };
    
    NSMutableArray *combinations = [NSMutableArray array];
    NSMutableString *combination = @"".mutableCopy;
    
    //回溯法
    [self backTrackWithCombinations:combinations
                combination:combination
                phoneMap:phoneMap
                             digits:digits
                              index:0];
    
    return combinations.copy;
}

- (void)backTrackWithCombinations:(NSMutableArray *)combinations
                      combination:(NSMutableString *)combination
                         phoneMap:(NSDictionary *)phoneMap
                           digits:(NSString *)digits
                            index:(NSInteger)index {
   
    if (index == digits.length) {
   
        [combinations addObject:combination.copy];
    }else {
   
        NSString *digit = [digits substringWithRange:NSMakeRange(index, 1)];
        NSString *letters = phoneMap[digit];
        if (letters.length > 0) {
   
            for (NSInteger i=0; i<letters.length; i++) {
   
                unichar charac = [letters characterAtIndex:i];
                NSString *str = [NSString stringWithCharacters:&charac length:1];
                
                [combination appendString:str];
                [self backTrackWithCombinations:combinations
                            combination:combination
                            phoneMap:phoneMap
                                         digits:digits
                                          index:index+1];
                [combination deleteCharactersInRange:NSMakeRange((combination).length-1, 1)];
            }
        }
    }
}

相关推荐

  1. 100】17.电话号码字母组合

    2023-12-23 23:28:03       34 阅读
  2. 17. 电话号码字母组合

    2023-12-23 23:28:03       26 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-23 23:28:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-23 23:28:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-23 23:28:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-23 23:28:03       20 阅读

热门阅读

  1. 每日一题(LeetCode)----栈和队列--逆波兰表达式求值

    2023-12-23 23:28:03       45 阅读
  2. lc1:两数之和

    2023-12-23 23:28:03       37 阅读
  3. 漫谈计算机安全

    2023-12-23 23:28:03       37 阅读
  4. Oracle 11g体系结构整理-明日科技编著

    2023-12-23 23:28:03       35 阅读
  5. ffmpeg 打印视频帧的数量

    2023-12-23 23:28:03       44 阅读
  6. ElasticSearch DSL Bool查询

    2023-12-23 23:28:03       43 阅读
  7. MyBatis的延迟加载(懒加载)

    2023-12-23 23:28:03       44 阅读
  8. SpringBoot整合Mybatis遇到的常见问题及解决方案

    2023-12-23 23:28:03       44 阅读
  9. 点云分割--基于PatchWork++的地面点云分割

    2023-12-23 23:28:03       46 阅读