Backtracking over positions
Time O(4ⁿ · n) Space O(n)dfs(index): if index == length record; else for each letter of digits[index], append, recurse, remove.
import java.util.*;
class Solution {
private static final String[] KEYS = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
public List<String> letterCombinations(String digits) {
List<String> out = new ArrayList<>();
if (digits.isEmpty()) return out;
dfs(digits, 0, new StringBuilder(), out);
return out;
}
private void dfs(String digits, int i, StringBuilder sb, List<String> out) {
if (i == digits.length()) { out.add(sb.toString()); return; }
for (char c : KEYS[digits.charAt(i) - '0'].toCharArray()) {
sb.append(c);
dfs(digits, i + 1, sb, out);
sb.deleteCharAt(sb.length() - 1);
}
}
}Verdict: At most 4⁴ = 256 results.