2015年9月20日星期日

Letter Combinations of a Phone Number

My java solution.

The basic idea is to have a helper function to get the corresponding characters for each digit; then use for-loops to get the combinations

public class Solution {
    // have a helper function to get all the corresponding letters, and then combine the result togeter by StringBuffer.
    public List<String> letterCombinations(String digits) {
        List<String> res = new ArrayList<String>();
        if(digits ==null ||digits.length()==0) return res;
        for(int i=0;i<digits.length();i++){
            List<Character> resChars=getChars(digits.charAt(i));
            if(res.size()==0){
                for(int j =0;j<resChars.size();j++){
                    res.add(resChars.get(j)+"");
                }
            }else{
                List<String> restmp = new ArrayList<String>();
                for(int p =0;p<res.size();p++){
                    for(int q =0;q<resChars.size();q++){
                        restmp.add(res.get(p)+resChars.get(q));
                    }
                }
                res=restmp;
            }
        }
        return res;
    }
   
    List<Character> getChars(char digit){
        List<Character> res = new ArrayList<Character>();
       
        switch(digit){
            case '2': res.add('a');res.add('b');res.add('c');break;
            case '3': res.add('d');res.add('e');res.add('f');break;
            case '4': res.add('g');res.add('h');res.add('i');break;
            case '5': res.add('j');res.add('k');res.add('l');break;
            case '6': res.add('m');res.add('n');res.add('o');break;
            case '7': res.add('p');res.add('q');res.add('r');res.add('s');break;
            case '8': res.add('t');res.add('u');res.add('v');break;
            case '9': res.add('w');res.add('x');res.add('y');res.add('z');break;
            default:break;
        }
       
        return res;
    }
}

没有评论: