17. Letter Combinations of a Phone Number--back tracking--字符数组

17 给出一个电话拨号盘,数字2-9代表一些字母,已知数字,求出所有字母的可能

例子 比如 求"23" , 2--->"abc" 3-->"def"

画出递归数其实非常简单:

和77. Combinations 本质上是一样的, 都是求所排列问题,但和数字排列不同的时,每一次需要遍历的数组不是固定的,而是根据数的层数来决定的。所以需要设定一个tree_level, 每次递归都需要层数递增,来选择不同的字符串code 如下:

class Solution {
    public List<String> letterCombinations(String digits) {
        if(digits.length() == 0) return new ArrayList<String>();
        String[] map = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
        
        List<String> result = new ArrayList<>();
        
        dfs(new StringBuilder(), result, digits,map, 0);
        return result;

}  
     private void dfs(StringBuilder curResult, List<String> result, String digits, String[] map, int tree_level){
         if(curResult.length() == digits.length()){
             result.add(curResult.toString());
             return;
         }
             String str = map[digits.charAt(tree_level)-'0'];
             for(int j = 0; j<str.length(); j++){
                 curResult.append(str.charAt(j));
                 dfs(curResult, result,digits, map,tree_level+1);
                 curResult.deleteCharAt(curResult.length()-1);
             }  
     }
}

还有当输入字符串为空串时, 返回的是 [] 而不是 [""], 因此在主程序里需要判断这种特殊情况。

 if(digits.length() == 0) return new ArrayList<String>();

 

转载于:https://www.cnblogs.com/keepAC/p/9941308.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(Telephone Number Word Generator) Standard telephone keypads contain the digits 0 through 9. The numbers 2 through 9 each have three letters associated with them, as is indicated by the following table: Many people find it difficult to memorize phone numbers, so they use the correspondence between digits and letters to develop seven-letter words that correspond to their phone numbers. For example, a person whose telephone number is 686-2377 might use the correspondence indi- cated in the above table to develop the seven-letter word “NUMBERS.” Businesses frequently attempt to get telephone numbers that are easy for their clients to remember. If a business can advertise a simple word for its customers to dial, then no doubt the business will receive a few more calls. Each seven-letter word corresponds to exactly one seven-digit telephone number. The restaurant wishing to increase its take-home business could surely do so with the number 825-3688 (i.e., “TAKEOUT”). Each seven-digit phone number corresponds to many separate seven-letter words. Unfortunately, most of these represent unrecognizable juxtaposi- tions of letters. It’s possible, however, that the owner of a barber shop would be pleased to know that the shop’s telephone number, 424-7288, corresponds to “HAIRCUT.” A veterinarian with the phone number 738-2273 would be happy to know that the number corresponds to “PETCARE.” Write a program that, given a seven-digit number, writes to a file every possible seven-letter word corresponding to that number. There are 2187 (3 to the seventh power) such words. Avoid phone numbers with the digits 0 and 1.
06-09

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值