Letter Combinations of a Phone Number

一道非常经典的dfs

public class Solution {
    String[] keybd ={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
    // http://www.cnblogs.com/springfor/p/3879829.html
    public ArrayList<String> letterCombinations(String digits) {
        ArrayList<String> res = new ArrayList<String>();
        if(digits.length()<1) return res;
        StringBuilder item = new StringBuilder();
        dfs(digits, item, res, 0);
        return res;
    }
    
    public void dfs(String digits, StringBuilder item, ArrayList<String> res, int start){
        if(start== digits.length()) {
            res.add(item.toString()); // 不是 new StringBuilder (item)
            return;
        }
        int num = digits.charAt(start)-'0';
        for(int i=0;i<keybd[num].length();i++){
            item.append(keybd[num].charAt(i));
            dfs(digits, item, res, start+1); // 注意后面那个位置是st+1 不是i
            item.deleteCharAt(item.length()-1);
            
        }
    }
}

 

posted @ 2015-05-29 12:17  世界到处都是小星星  阅读(156)  评论(0编辑  收藏  举报