前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode - 电话号码的字母组合

LeetCode - 电话号码的字母组合

作者头像
晓痴
发布2019-07-24 11:58:18
5510
发布2019-07-24 11:58:18
举报
文章被收录于专栏:曌的晓痴曌的晓痴

这是第17题,一道中等难度的题目,其实解法挺简单的,不是很难。

原题地址:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

题目描述

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

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

示例:

输入:"23"

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

说明:

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

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

这题的主要思路和之前集合相关的题目很像,比如求所有子集

  1. 新建每个按键的字母组合,static变量有效减少内存占用
  2. 再次使用递归的方式,三个参数分别是输入的数字、当前读到第几位数字、当前的字母组合
  3. 在每次递归时,根据当前读到第几位数字,获取该数字对应的字母列表,为当前集合中的所有字母组合都加上该字母
  4. 去除集合中的头几个元素,因为没有包括当前字母,然后接着递归

中文官网题解:

https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/solution/

个人题解:

代码语言:javascript
复制
class Solution {
    
    private static final char[][] CHARS = {
            {
                    'a', 'b', 'c'
            },

            {
                    'd', 'e', 'f'
            },

            {
                    'g', 'h', 'i'
            },

            {
                    'j', 'k', 'l'
            },

            {
                    'm', 'n', 'o'
            },

            {
                    'p', 'q', 'r', 's'
            },

            {
                    't', 'u', 'v'
            },

            {
                    'w', 'x', 'y', 'z'
            }
    };
    
   public List<String> letterCombinations(String digits) {
        return letterCombinations(digits.toCharArray(), 0, new ArrayList<>());
    }

    public List<String> letterCombinations(char[] chars, int index, List<String> list) {
        if (index == chars.length) {
            return list;
        }
        int j = (int) chars[index] - 50;
        int size = list.size();
        for (char cc : CHARS[j]) {
            if (size == 0) {
                list.add(String.valueOf(cc));
            } else {
                for (int i = 0; i < size; i++) {
                    list.add(list.get(i) + cc);
                }
            }
        }
        for (int i = 0; i < size; i++) {
            list.remove(0);
        }
        return letterCombinations(chars, index + 1, list);
    }
}

结果:

大脑随便一热之后的结果...看上去还不错的样子。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 曌的晓痴 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档