Leetcode 17.电话号码的字母组合

发布于:2024-04-07 ⋅ 阅读:(147) ⋅ 点赞:(0)

题目

image-20240405192050721

思路

输入的digits有几个数就有几层。

一层中有几个数则取决于输入的数字对应的字母有几个。

1.确定递归函数的返回值及参数:

其实参数不是一开始就确定好的,而是你在写递归函数的时候缺啥,就往进去传啥。

这里我就直接全部写出来。

首先也是设定两个全局变量。一个是path存放符合条件单一结果。如:“ad”。一个是result,是所有path的集合[“ad”,“ae”…]。

然后是局部变量,一个是要输入的digits,一个是numString(它是数字和字母的映射表),一个是index(用来确定要处理digits中的哪个数字)

2.回溯函数终止条件

当path.len==digits.len时终止。

3.单层搜索的过程

用path保存当前数字对应的字母

递归搜索当前节点的所有子节点

回溯,remove

细节:怎样实现字母和数字的映射呢?很直接的一个想法哈希表。我们这里用数组哈希。

String[] numString = {“”, “”, “abc”, “def”, “ghi”, “jkl”, “mno”, “pqrs”, “tuv”, “wxyz”};

用数组的index当作key。

代码

import java.util.ArrayList;

//leetcode submit region begin(Prohibit modification and deletion)
class Solution {

    List<String> res = new ArrayList<>();
    StringBuffer path = new StringBuffer();

    public List<String> letterCombinations(String digits) {
        if (digits.length() == 0) {
            return res;
        }

        String[] numString = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
        backTracking(digits, numString, 0);
        return res;
    }

    public void backTracking(String digitis, String[] numString, int index) {
        if (path.length() == digitis.length()) {
            res.add(path.toString());
            return;
        }
        //获取当前访问的数字对应的字母组
        String str = numString[digitis.charAt(index) - '0'];
        for (int i = 0; i < str.length(); i++) {
            path.append(str.charAt(i));
            backTracking(digitis, numString, index + 1);
            path.deleteCharAt(path.length() - 1);
        }
    }
}
//leetcode submit region end(Prohibit modification and deletion)


网站公告

今日签到

点亮在社区的每一天
去签到