https://leetcode.com/problems/letter-combinations-of-a-phone-number/#/description
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"].
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
package go.jacob.day718;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* 17. Letter Combinations of a Phone Number
* @author Jacob
*
*/
public class Demo2 {
/*
* 牛客网:回溯法
* 解法二是leetcode的答案,题目稍有区别
*/
ArrayList<String> res=new ArrayList<String>();
public ArrayList<String> letterCombinations(String digits) {
if(digits==null||digits.length()==0){
res.add("");
return res;
}
String[] mapping={"0","1","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
letterCombinations(digits,0,"",mapping);
return res;
}
private void letterCombinations(String digits, int i, String string,String[] mapping) {
if(i>=digits.length()){
res.add(string);
return;
}
String strs=mapping[Character.getNumericValue(digits.charAt(i))];
for(char c:strs.toCharArray()){
letterCombinations(digits,i+1,string+c,mapping);
}
}
/*
* 解法二
* leetcode解法
*/
public List<String> letterCombinations_1(String digits) {
LinkedList<String> res=new LinkedList<String>();
if(digits==null||digits.length()==0)
return res;
//用字符串数组存储映射关系,不需要用map
String[] mapping={"0","1","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
res.add("");
for(int i=0;i<digits.length();i++){
int x=Character.getNumericValue(digits.charAt(i));
while(res.peek().length()==i){
String temp=res.poll();
for(char c:mapping[x].toCharArray()){
res.add(temp+c);
}
}
}
return res;
}
}