17. 電話號碼的字母組合

class Solution {//回溯思想,一直Try,到頭了再返回
    public List<String> letterCombinations(String digits) {
        StringBuilder sb = new StringBuilder();
	List<String> res = new ArrayList<String>();
	if(digits.length()==0||digits==null)
		return res;
        Map<Character,String> map= new HashMap<Character,String>();
        map.put('2', "abc");
        map.put('3', "def");
        map.put('4', "ghi");
        map.put('5', "jkl");
        map.put('6', "mno");
        map.put('7', "pqrs");
        map.put('8', "tuv");
        map.put('9', "wxyz");
        backtrack(digits,sb,map,res,0);//下標從零開始,對應‘2’的字符串
        return res;
    }
    public static void backtrack(String digits,StringBuilder sb,Map<Character,String> map,List<String> res,int number){
		if(sb.length()==digits.length()) {
			res.add(sb.toString());
			return;
		}
		String ss=map.get(digits.charAt(number));
		for(int i=0;i<ss.length();i++) {
			sb.append(ss.charAt(i));
			backtrack(digits,sb,map,res,number+1);
			sb.deleteCharAt(sb.length() - 1);//這一步很容易寫錯,走完‘9’的W後,刪除W,然後繼續下一個X,依次類推層層返回。
		}
    }//提交後一次AC
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章