每天一道算法题

LeetCode第17题:电话号码的字母组合

这道题首先一看题目,号码数目不固定,那么肯定不能用循环,否则会嵌套很多层,这种题首先应该想到的是递归方案,能意识到应该用递归解法就很容易想出来了。

public static List<String> letterCombinations(String digits) {
        if (digits.length() == 0) {
            return new ArrayList<>();
        }
        Map<Character, List<String>> phoneMap = new HashMap<Character, List<String>>() {{
            put('2', Arrays.asList("a", "b", "c"));
            put('3', Arrays.asList("d", "e", "f"));
            put('4', Arrays.asList("g", "h", "i"));
            put('5', Arrays.asList("j", "k", "l"));
            put('6', Arrays.asList("m", "n", "o"));
            put('7', Arrays.asList("p", "q", "r", "s"));
            put('8', Arrays.asList("t", "u", "v"));
            put('9', Arrays.asList("w", "x", "y", "z"));
        }};


        return getStrings(phoneMap, digits);
    }

    /**
     * 递归拼接,每次返回的都是当前第一位字符与剩下的结果乘出来的并集
     * @param phoneMap
     * @param digits
     * @return
     */
    public static List<String> getStrings(Map<Character, List<String>> phoneMap, String digits) {
        if (digits.length() == 1) {
            return new ArrayList<>(phoneMap.get(digits.charAt(0)));
        }
        List<String> first = phoneMap.get(digits.charAt(0));
        List<String> subAns = letterCombinations(digits.substring(1, digits.length()));
        List<String> ans = new ArrayList<>();
        for (String subAn : subAns) {
            for (String s : first) {
                ans.add(s + subAn);
            }
        }
        return ans;
    }
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 前言 算法这个活动很严,每天必须打卡,而且不限制语言,群内已有PHP、Python、Java、Javascript...
    鸡汤小弟阅读 2,929评论 5 4
  • Leetcode第9题:回文数,第七题也可以用这题的解法直接解 这道题首先直接排除负数,然后正数直接反转判断与原值...
    白小贱_337e阅读 1,058评论 0 0
  • LeetCode第五题:最长回文子串 首先暴力破解,双层循环,内层遍历判断每一个坐标包含的字符串是否是回文,是则判...
    白小贱_337e阅读 1,180评论 0 0
  • LeetCode第12题:整数转罗马数字 这道题搞了个比较妖的解法,虽然妖路但是耗时还是击败了91.37%的用户,...
    白小贱_337e阅读 1,144评论 0 0
  • 无重复字符的最长子串[https://leetcode-cn.com/problems/longest-subst...
    白小贱_337e阅读 1,193评论 0 0

友情链接更多精彩内容