Letter Combinations of a Phone Number
Given a string containing digits from 2-9
inclusive, 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. Note that 1 does not map to any letters.

Example:
Input: "23"
Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
和permutation和factor combanition一个套路,时间复杂度 o(n4^n), string转换的时候,o(n), 每个数字对应最多4个字母,总共的组合就是4的n次方
string builder deletecharat 最后一个字母是o(1),一般都是o(n)
o(n*4^n) ---> o(4^n) , space o(n) n层栈
class Solution {
public List<String> letterCombinations(String digits) {
char[][] charArr =
{
{},
{},
{'a','b','c'},
{'d','e','f'},
{'g','h','i'},
{'j','k','l'},
{'m','n','o'},
{'p','q','r','s'},
{'t','u','v'},
{'w','x','y','z'}
};
List<String> res = new ArrayList<>();
if(digits == null || digits.length() == 0)
return res;
StringBuilder cur = new StringBuilder();
backtracking(res,cur,0,digits,charArr);
return res;
}
public void backtracking(List<String> res, StringBuilder cur, int l, String digits,char[][] charArr){
if(l == digits.length()){
res.add(cur.toString());
return;
}
for(char c : charArr[digits.charAt(l)-'0']){
cur.append(c);
backtracking(res,cur,l+1,digits,charArr);
cur = cur.deleteCharAt(cur.length()-1);//o(n)
}
}
}
Last updated