LeetCode题目:17.电话号码的字母组合 解题思路及Java实现

题目:
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:

输入:“23”
输出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。

思路:
典型的递归题目

Java实现:

package code;

import java.util.ArrayList;
import java.util.List;

public class Demo17 {

    private StringBuilder sb = new StringBuilder();
    private List<String> list = new ArrayList<>();
    public List<String> letterCombinations(String digits){
        //典型递归问题
        if (digits == null || digits.length()<1){
            return list;
        }
        addStr(0,digits);
        return list;
    }

    private void addStr(int index, String digits){
        //因为一个数字代表一个字符,此时StringBuilder中存放的就是我们需要的结果之一
        if (sb.length() == digits.length()){
            list.add(sb.toString());
            return;
        }
        String s = getStr(digits.charAt(index));

        for (int i=0;i<s.length();i++){
            sb.append(s.charAt(i));
            addStr(index+1,digits);
            sb.deleteCharAt(sb.length()-1);//每次循环最后,删掉StringBuffer中最后一个元素
        }
    }

    private String getStr(char c) {
        switch (c){
            case '2':
                return "abc";
            case '3':
                return "def";
            case '4':
                return "ghi";
            case '5':
                return "jkl";
            case '6':
                return "mno";
            case '7':
                return "pqrs";
            case '8':
                return "tuv";
            case '9':
                return "wxyz";
            default:
                return "";
        }

    }


    public static void main(String[] args) {
        Demo17 demo = new Demo17();
        List<String> list = demo.letterCombinations("");
        System.out.println(list.toString());
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值