题目
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"].
思路
- Iterative:
- Recursive 1: recursive function return the whole sets, add letters to result after get back from child function, local result
- Recursive 2: recursive function has no return, add letters to result before get into child function, global result
注意
改进
Java
public class Solution {
public void dfs(String digits, int start, HashMap<Integer,String> map, ArrayList<String> res, String letters){
if(start==digits.length()) {res.add(letters); return;}
String str = map.get(digits.charAt(start)-'0');
for(int i=0; i<str.length(); i++){
dfs(digits, start+1, map, res, letters+str.charAt(i));
}
}
public ArrayList<String> letterCombinations(String digits) {
ArrayList<String> res = new ArrayList<String>();
String[] pad = {" ","#","abc","def","ghi","jkl", "mno", "pqrs", "tuv", "wxyz"};
HashMap<Integer,String> map = new HashMap<Integer,String>();
for(int i=0; i<10; i++){
map.put(i,pad[i]);
}
dfs(digits,0,map,res,"");
return res;
}
}
Python
- Iterative
class Solution(object):
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
letters = {'0':' ','2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}
result = []
if len(digits) != 0:
for d in digits:
temp_result = letters[d]
if result != []:
result = [tr + x for tr in result for x in temp_result]
else:
result = temp_result
return result
- Recursive 1
class Solution(object):
letters = {'0':' ','2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
result = []
if len(digits) != 0:
result = self.letters[digits[0]]
temp_result = self.letterCombinations(digits[1:])
if temp_result != []:
result = [tr + x for tr in result for x in temp_result]
return result
- Recursive 2:
class Solution(object):
letters = {'0':' ','2':['a','b','c'],'3':['d','e','f'],'4':['g','h','i'],'5':['j','k','l'],'6':['m','n','o'],'7':['p','q','r','s'],'8':['t','u','v'],'9':['w','x','y','z']}
result = []
def letterCombinations(self, digits):
"""
:type digits: str
:rtype: List[str]
"""
if len(digits) != 0:
temp_result = self.letters[digits[0]]
if self.result != []:
self.result = [tr + x for tr in self.result for x in temp_result]
else:
self.result = temp_result
self.letterCombinations(digits[1:])
return self.result