def letter_combinations(digits):
if not digits: return []
phone={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
res=[]
def bt(i,path):
if i==len(digits): res.append(path); return
for c in phone[digits[i]]: bt(i+1,path+c)
bt(0,'')
return res
public List<String> letterCombinations(String digits){
if(digits.isEmpty()) return new ArrayList<>();
String[] phone={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
List<String> res=new ArrayList<>();
backtrack(digits,phone,res,0,new StringBuilder());
return res;
}
void backtrack(String d,String[] p,List<String> res,int i,StringBuilder path){
if(i==d.length()){res.add(path.toString());return;}
for(char c:p[d.charAt(i)-'2'].toCharArray()){
path.append(c);
backtrack(d,p,res,i+1,path);
path.deleteCharAt(path.length()-1);
}
}
Python dict for phone vs Java array indexed by digit-'2'. String immutability vs StringBuilder.
def letter_combinations(digits):
if not digits: return []
phone={'2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'}
res=[]
def bt(i,path):
if i==len(digits): res.append(path); return
for c in phone[digits[i]]: bt(i+1,path+c)
bt(0,'')
return res
public List<String> letterCombinations(String digits){
if(digits.isEmpty()) return new ArrayList<>();
String[] phone={"abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
List<String> res=new ArrayList<>();
backtrack(digits,phone,res,0,new StringBuilder());
return res;
}
void backtrack(String d,String[] p,List<String> res,int i,StringBuilder path){
if(i==d.length()){res.add(path.toString());return;}
for(char c:p[d.charAt(i)-'2'].toCharArray()){
path.append(c);
backtrack(d,p,res,i+1,path);
path.deleteCharAt(path.length()-1);
}
}
1. For each digit try each letter 2. Recurse to next 3. Collect complete paths