(Java)LeetCode-17. Letter Combinations of a Phone Number

Given a digit string, return all possible letter combinations that the number could represent.

A mapping of digit to letters (just like on the telephone buttons) is given below.

Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.


这一题也是蛮简单滴,无非是几重循环即可搞定,为了麻烦麻烦自己,采用了递归的想法,虽然代码简单了些,牺牲了空间和时间


public class Solution {
    char[][] a = {{},{},{'a','b','c'},{'d','e','f'},{'g','h','i'},{'j','k','l'},{'m','n','o'},{'p','q','r','s'},{'t','u','v'},{'w','x','y','z'}};
	public List<String> letterCombinations(String digits) {
        if(digits.length() == 0){
        	return new ArrayList<String>();
        }
        if(digits.length() == 1){
        	List<String> result = new ArrayList<String>();
        	int i = Integer.parseInt(digits);
        	for(char c : a[i]){
        		result.add(Character.toString(c));
        	}
        	return result;
        }
        int j = Integer.parseInt(digits.substring(0,1));
        List<String> res = new ArrayList<String>();
        for(char c : a[j]){
        	for(String ss : letterCombinations(digits.substring(1))){
        		res.add(c+ss);
        	}
        }
		return res;
    }
}


附上大神的递归,速度很快~


public List<String> letterCombinations(String digits) {
    List<String> list = new ArrayList<String>();
    if(!digits.isEmpty()) {
        helper(digits, "", 0, list);
    }
    return list;
}

public void helper(String digits, String combo, int position, List<String> list) {
    if(position == digits.length()) {
        list.add(combo);
        return;
    }
    String[] letters = getMapping(digits.charAt(position));
    for(int i = 0; i < letters.length; i++){
        helper(digits, combo + letters[i], position + 1, list);
    }
}

public String[] getMapping(char c) {
    switch (c) {
    case '2':
        return new String[] {"a", "b", "c"};
    case '3':
        return new String[] {"d", "e", "f"};
    case '4':
        return new String[] {"g", "h", "i"};
    case '5':
        return new String[] {"j", "k", "l"};
    case '6':
        return new String[] {"m", "n", "o"};
    case '7':
        return new String[] {"p", "q", "r", "s"};
    case '8':
        return new String[] {"t", "u", "v"};
    case '9':
        return new String[] {"w", "x", "y", "z"};
    }

    return new String[] {};
}




评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值