leetcode17-电话号码的字母组合

原题

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。

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

leetcode17-电话号码的字母组合

示例:

输入: "23"
输出: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

解法

思想

dfs就嗯搜 →_→

代码

class Solution {
    List<String> ans = new ArrayList<>();
    char[] chars;
    public List<String> letterCombinations(String digits) {
        chars = digits.toCharArray();
        if(chars.length == 0) return new ArrayList<String>();
        List<Character> list = new ArrayList<>();
        dfs(list,0);
        return ans;
    }

    public void dfs(List<Character> list,int index){
        if(index == chars.length) {
            StringBuilder sb = new StringBuilder();
            for(Character c:list){
                sb.append(c);
            }
            ans.add(sb.toString());
            return;
        }
        for(char c:numToChars(chars[index])){
            List<Character> copy = new ArrayList<>(list);
            copy.add(c);
            dfs(copy,index+1);
        }
    }

    public char[] numToChars(char num){
        switch(num){
            case '2':
                return new char[]{'a','b','c'};
            case '3':
                return new char[]{'d','e','f'};
            case '4':
                return new char[]{'g','h','i'};
            case '5':
                return new char[]{'j','k','l'};
            case '6':
                return new char[]{'m','n','o'};
            case '7':
                return new char[]{'p','q','r','s'};
            case '8':
                return new char[]{'t','u','v'};
            case '9':
                return new char[]{'w','x','y','z'};
        }
        return new char[]{};
    }
}

原创文章,作者:彭晨涛,如若转载,请注明出处:https://www.codetool.top/article/leetcode17-%e7%94%b5%e8%af%9d%e5%8f%b7%e7%a0%81%e7%9a%84%e5%ad%97%e6%af%8d%e7%bb%84%e5%90%88/

(0)
彭晨涛彭晨涛管理者
上一篇 2020年5月2日
下一篇 2020年5月3日

相关推荐

  • leetcode154-寻找旋转排序数组中的最小值II

    原题 假设按照升序排序的数组在预先未知的某个点上进行了旋转。 ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] )。 请找出其中最小的元素。…

    算法 2020年1月7日
    090
  • leetcode69-x的平方根

    原题 实现 int sqrt(int x) 函数。 计算并返回 x 的平方根,其中 x 是非负整数。 由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。 示例1: 输入:…

    算法 2019年12月30日
    040
  • leetcode80-删除排序数组中的重复项II

    原题 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外…

    算法 2020年5月26日
    0140
  • leetcode409-最长回文串

    原题 给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。 在构造过程中,请注意区分大小写。比如 "Aa" 不能当做一个回文字符串。 注意:假设字符串的长…

    算法 2020年3月19日
    0570
  • leetcode134-加油站

    原题 在一条环路上有 N 个加油站,其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车,从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[…

    算法 2020年2月16日
    080
  • 剑指offer51-数组中的逆序对

    原题(来源Leetcode) 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。 示例 1: 输入: [7…

    算法 2020年4月24日
    0400
  • leetcode167-两数之和II-输入有序数组

    原题 给定一个已按照 升序排列 的有序数组,找到两个数使得它们相加之和等于目标数。 函数应该返回这两个下标值index1和index2,其中index1必须小于index2。 说明…

    算法 2019年11月20日
    0190
  • leetcode83-删除排序链表中的重复元素

    今天打算多刷几道算法题 原题 给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->…

    算法 2020年6月16日
    01350
  • leetcode242-有效的字母异位词

    原题 https://leetcode.cn/problems/valid-anagram/description/ 解法 (针对进阶场景,若字符串中存在unicode字符) fu…

    算法 2024年3月26日
    050
  • leetcode383-赎金信

    原题 https://leetcode.cn/problems/ransom-note/ 解法 记录下字母出现次数 func canConstruct(ransomNote str…

    算法 2024年3月26日
    030

发表回复

登录后才能评论