0
点赞
收藏
分享

微信扫一扫

LeetCode 17 电话号码的字母组合 -- 回溯法

承蒙不弃 2022-02-17 阅读 63

题意:

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

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

示例 1:
输入:digits = “23”
输出:[“ad”,“ae”,“af”,“bd”,“be”,“bf”,“cd”,“ce”,“cf”]

示例 2:
输入:digits = “”
输出:[]

示例 3:
输入:digits = “2”
输出:[“a”,“b”,“c”]

提示:
0 <= digits.length <= 4
digits[i] 是范围 [‘2’, ‘9’] 的一个数字。


参考文章

思路:

这是一道回溯类题目,直接套用回溯模板代码,不难写出代码。

回溯模板代码:

void backtracking(参数) {
    if (终止条件) {
        存放结果;
        return;
    }
    for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {
        处理节点;
        backtracking(路径,选择列表); // 递归
        回溯,撤销处理结果
    }
}

本题Java代码:

class Solution {
    private StringBuilder tmp = new StringBuilder();
    private List<String> ans = new ArrayList<>();
    private String[] word = new String[]{"abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    private void search(String digits, int start) {
        if (start == digits.length()) {
            ans.add(tmp.toString());
            return;
        }
        for (int i = 0; i < word[digits.charAt(start) - '0' - 2].length(); i++) {
            tmp.append(word[digits.charAt(start) - '0' - 2].charAt(i));
            search(digits, start + 1);
            tmp.deleteCharAt(tmp.length() - 1);
        }
    }
    public List<String> letterCombinations(String digits) {
        if (digits.length() == 0) return ans;
        search(digits, 0);
        return ans;
    }
}
举报

相关推荐

0 条评论