https://leetcode-cn.com/problems/letter-combinations-of-a-phone-number/

思路:DFS、回溯(没有剪枝,解空间即为答案)

改进:字符串相加可以使用StringBuffer。

class Solution {
    //两个大括号的方式初始化(本质上是匿名内部类 + 实例化代码块儿)
    Map<String,String> hashMap=new HashMap<String,String>(){{
        put("2","abc"); 
        put("3","def"); 
        put("4","ghi"); 
        put("5","jkl"); 
        put("6","mno"); 
        put("7","pqrs"); 
        put("8","tuv"); 
        put("9","wxyz"); 
    }};
    public List<String> letterCombinations(String digits) {
        List<String> list=new ArrayList<String>();
        if(digits.length()<1||digits==null) return list;
        String str=String.valueOf(digits.charAt(0));
        for(int i=0;i<hashMap.get(str).length();i++){
            String s=String.valueOf(hashMap.get(str).charAt(i));
            backTrace(list,s,digits,1);
        }
        return list;
    }
    //dep为深度,这里指字符的索引;s为前面映射的字符串
    public void backTrace(List<String> list,String s,String digits,int dep){
        if(digits.length()==dep){
            list.add(s);
            return;
        }
        String str=String.valueOf(digits.charAt(dep));
        for(int i=0;i<hashMap.get(str).length();i++){
            String s1=s+String.valueOf(hashMap.get(str).charAt(i));
            backTrace(list,s1,digits,dep+1);
        }
    }
}


LeetCode      回溯

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!