1. 程式人生 > >24.Letter Combinations of a Phone Number(電話號對應的字符組合)

24.Letter Combinations of a Phone Number(電話號對應的字符組合)

.get could edi new hat answer tostring hash inf

Level:

??Medium

題目描述:

Given a string containing digits from 2-9 inclusive, 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. Note that 1 does not map to any letters.

技術分享圖片

Example:

Input: "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.

思路分析:

??建立hashmap將每個數字對應的字符映射存放在map中,利用遞歸回溯解決問題。

代碼:

public class Solution{
    public List<String>letterCombinations(String digits){
        List<String>res=new ArrayList<>();
        if(digits==null||digits.equals(""))
            return res;
        HashMap<Character,char[]>map=new HashMap<>();
        map.put('0',new char[]{});
        map.put('1',new char[]{});
        map.put('2',new char[]{'a','b','c'});
        map.put('3',new char[]{'d','e','f'});
        map.put('4',new char[]{'g','h','i'});
        map.put('5',new char[]{'j','k','l'});
        map.put('6',new char[]{'m','n','o'});
        map.put('7',new char[]{'p','q','r','s'});
        map.put('8',new char[]{'t','u','v'});
        map.put('9',new char[]{'w','x','y','z'});
        StringBuilder str=new StringBuilder();
        findComb(digits,map,res,str);
        return res;
    }
    public void findComb(String digits,HashMap<Character,char[]>map,List<String>res,StringBuilder str){
        if(str.length==digits.length){//str的長度等於digits的長度證明是其中一個結果
            res.add(str.toString());
            return;
        }
        for(char c:map.get(digits.charAt(str.length()))){
            str.append(c);
            findComb(digits,map,res,str);//遞歸回溯找出所有的結果
            str.deleteCharAt(str.length()-1);//每找出一個結果後,str的長度減一,添加下一種可能
        }
    }
}

24.Letter Combinations of a Phone Number(電話號對應的字符組合)