LeetCode17【递归】:电话号码的字母组合

package leetcode.editor.cn;

//给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 
//
// 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 
//
// 
//
// 示例: 
//
// 输入:"23"
//输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
// 
//
// 说明: 
//尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。 
// Related Topics 字符串 回溯算法


import javax.swing.*;
import java.util.ArrayList;
import java.util.List;

//Java:电话号码的字母组合
public class P17电话号码的字母组合{
    public static void main(String[] args) {
        Solution solution = new P17电话号码的字母组合().new Solution();
        List<String> ans = solution.letterCombinations("23");
        for (int i = 0; i < ans.size(); i++) {
            System.out.println(ans.get(i));
        }
        // TO TEST
    }
    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
            public List<String> list = new ArrayList<>();
            public List<String> letterCombinations(String digits) {
                if (digits.length() == 0) {
                    return list;
                }
                int len = digits.length();
                String[] keyBoard = new String[]{"abc","def", "ghi", "jkl", "mno",
                "pqrs", "tuv", "wxyz"};
                String[] map = new String[len];
                for (int i = 0; i < len; i++) {
                    map[i] = keyBoard[digits.charAt(i) - '0' - 2];
                }
                robot(map, len - 1, 0, "");
                return list;
            }
            public void robot(String[] map, int len, int idx, String strTemp) {
                if (idx > len) {
                    list.add(strTemp);
                    return;
                }
                String temp = map[idx];
                for (int i = 0; i < temp.length(); i++) {
                    robot(map, len, idx + 1, strTemp + temp.charAt(i));
                }
            }
    }
//leetcode submit region end(Prohibit modification and deletion)

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值