首页 > 试题广场 >

电话号码的字母组合

[编程题]电话号码的字母组合
  • 热度指数:1247 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
九键输入法中 2~9 每个数字对应了若干个的字母,请找出给定数字组合对应的全部字母组合。
1.该题你返回的组合顺序可以不唯一
2.该题你返回的字母大小写都是可以的

数据范围:数字长度 ,数字中保证不出现 0

键盘数字对应的映射如下:
示例1

输入

"55"

输出

["JJ","JK","JL","KJ","KK","KL","LJ","LK","LL"]
示例2

输入

"3"

输出

["D","E","F"]
经典回溯题
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param num string字符串 
     * @return string字符串ArrayList
     */
    private static final String[] seq = new String[]{
            "",
            "",
            "ABC",
            "DEF",
            "GHI",
            "JKL",
            "MNO",
            "PQRS",
            "TUV",
            "WXYZ"};

    public ArrayList<String> phoneNumber (String num) {
        ArrayList<String> res = new ArrayList<>();
        StringBuilder track = new StringBuilder();
        int depth = num.length();
        backtrack(track,res,0,depth,num);
        return res;
    }

    private void backtrack(StringBuilder track,ArrayList<String>res,int currDepth,int maxDepth,String num) {
        if (currDepth>=maxDepth) {
            res.add(track.toString());
            return;
        }
        int index = (int) num.charAt(currDepth) - '0';
        String currSeq = seq[index];
        for (int i = 0; i < currSeq.length(); i++) {
            track.append(currSeq.charAt(i));
            backtrack(track,res,currDepth+1,maxDepth,num);
            track.deleteCharAt(track.length()-1);
        }
    }
}


发表于 2022-07-12 17:52:35 回复(0)

问题信息

难度:
3条回答 1328浏览

热门推荐

通过挑战的用户

查看代码