自学内容网 自学内容网

LeetCode[中等] 17. 电话号码的字母组合

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。

思路 回溯法 

log:当前结果数组;level:记录当前数组的位置

递归结束条件是log.Length = digits.Length

将int与string类型对应关系存在字典中,通过digits[i] 找对应的value,遍历value长度,先将字符加入log,然后递归处理下一个level,恢复状态,撤销选择

result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择
public class Solution {
    List<string> res = new List<string>();
    public IList<string> LetterCombinations(string digits) {
        if(string.IsNullOrWhiteSpace(digits))
            return res;
        Dictionary<char, string> map = new Dictionary<char, string>()
        {
            {'2', "abc"},
            {'3', "def"},
            {'4', "ghi"},
            {'5', "jkl"},
            {'6', "mno"},
            {'7', "pqrs"},
            {'8', "tuv"},
            {'9', "wxyz"}
        };
        _LetterCombinations(digits, String.Empty, map, 0);
        return res;
    }

    private void _LetterCombinations(string digits, string log, Dictionary<char, string> map, int level)
    {
        if(log.Length == digits.Length)
        {
            res.Add(log);
            return;
        }
        string str = map[digits[level]];
        for(int i = 0; i < str.Length; i++)
        {
            log = log + str[i];
            _LetterCombinations(digits, log, map, level + 1);
            log = log.Remove(log.Length - 1);
        }
    }
}


原文地址:https://blog.csdn.net/Theolulu/article/details/142612976

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!