电话号码的字母组合 LeetCode 17题|刷题打卡

153 阅读1分钟

题目:

题解

和全排列一模一样的思路,全排列加回溯的思想,多了个数字字符串转字母的过程,终结条件是digits的长度和循环的深度一样就返回。其他和全排列思路一致。

代码

LinkedList<String> ans = new LinkedList<>();
public List<String> letterCombinations(String digits) {
    if (digits.isEmpty()) {
        return ans;
    }
    String[] map = new String[]{"0", "1", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
    dfs(digits, 0, new StringBuilder().append(" "), map);
    return ans;

}

private void dfs(String digits, int dept, StringBuilder str, String[] map) {

    if (digits.length() == dept) {
        ans.add(str.toString());
        return;
    }
    char temp = digits.charAt(dept);
    int index = temp - '0';
    String strtemp = map[index];

    for (char c : strtemp.toCharArray()) {
        str.append(c);
        dfs(digits, dept + 1, str, map);
        str.deleteCharAt(str.length() - 1);
    }
}

备注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看