Given a digit string, 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.
Input:Digit string "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
import java.util.ArrayList;
import java.util.List;
/**
* Created by lxw, liwei4939@126.com on 2018/3/4.
*/
public class LetterCombination {
static final char[][] char_map = {
{}, // 0
{}, //1
{'a', 'b', 'c'}, //2
{'d', 'e', 'f'}, //3
{'g', 'h', 'i'}, //4
{'j', 'k', 'l'}, //5
{'m', 'n', 'o'}, //6
{'p', 'q', 'r', 's'}, //7
{'t', 'u', 'v'}, //8
{'w', 'x', 'y', 'z'} //9
};
List<String> res = new ArrayList<>();
char[] stack;
public List<String> letterCombination(String digits){
if (digits == null || digits.length() == 0){
return new ArrayList<String>();
}
stack = new char[digits.length()];
dfs(digits.toCharArray(), 0);
return res;
}
private void dfs(char[] digits, int p){
if (p == digits.length){
res.add(new String(stack));
} else {
int num = digits[p] - '0';
for (char c : char_map[num]){
stack[p] = c;
dfs(digits, p+1);
}
}
}
public static void main(String[] args){
LetterCombination tmp = new LetterCombination();
String digits = new String("23");
List<String> res = tmp.letterCombination(digits);
System.out.println(res);
}
}