LeetCode #17 电话号码的字母组合

Posted 三笠·阿卡曼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode #17 电话号码的字母组合相关的知识,希望对你有一定的参考价值。

题目

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。

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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number
在这里插入图片描述

示例

在这里插入图片描述

代码

package com.vleus.algorithm.backtrack;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author vleus
 * @date 2021年06月27日 10:34
 */
public class LetterCombination {

    //用一个Map记录数字和字母的对应关系
    Map<Character,String> numberMap = new HashMap<Character,String>(){
        {
            put('2',"abc");
            put('3',"def");
            put('4',"ghi");
            put('5',"jkl");
            put('6',"mno");
            put('7',"pqrs");
            put('8',"tuv");
            put('9',"wxyz");
        }
    };

    public List<String> letterCombinations(String digits) {
        //定义List保存结果
        List<String> result = new ArrayList<>();

        //用一个StringBuffer保存当前一个可行解
        StringBuffer combination = new StringBuffer();

        //判空直接返回
        if ("".equals(digits)){
            return result;
        }

        //递归方法,传入当前考察的数字位置,初始为0
        backtrack(digits,result,combination,0);

        return result;
    }

    //定义回溯方法
    public void backtrack(String digits, List<String> result, StringBuffer combination, int i) {
        int n = digits.length();

        //判断当前深度搜索是否完成,如果完成,直接添加到result
        if (i >= n) {
            result.add(combination.toString());
        }else{

            //如果没搜索完,需要处理当前的数字
            char digit = digits.charAt(i);

            //取出可能对应的字母
            String letters = numberMap.get(digit);

            //遍历所有可能的字母
            for (int j = 0; j < letters.length(); j++) {
                //添加当前字母到可行解中
                combination.append(letters.charAt(j));

                //继续深度搜索下一个数字,递归调用
                backtrack(digits,result,combination,i+1);

                //状态回溯,回退状态
                combination.deleteCharAt(i);
            }

        }
    }

}

以上是关于LeetCode #17 电话号码的字母组合的主要内容,如果未能解决你的问题,请参考以下文章

[回溯算法]leetcode17. 电话号码的字母组合(c实现)

leetcode17 电话号码的字母组合(Medium)

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

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

LeetCode #17 电话号码的字母组合

LeetCode17. 电话号码的字母组合