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.
Subscribe to see which companies asked this question
全排列非递归实现之一:
while(flag <= size){
int index = 0;
String[] strTemp = new String[strA.length * strB.length];
for(int i = 0; i < strA.length; i++){
for(int j = 0; j < strB.length; j++){
strTemp[index++] = strA[i] + strB[j];
}
}
strA = strTemp;
if(flag < size){
BArr = items[numsArr[flag]-'0'].toCharArray();
strB = new String[BArr.length];
for(int i = 0; i < BArr.length; i++){
strB[i] = ""+BArr[i];
}
}else{
break;
}
flag++;
}
第二次
public class Solution {
public List<String> letterCombinations(String digits) {
List<String> result = new ArrayList<>();
char[][] items = {{' '}, {' '}, {'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'}};
int index = 0, now = 0;
while(index < digits.length()){
now = Integer.valueOf(""+digits.charAt(index++));
List<String> resultNow = new ArrayList<>();
if(now != 0 && now != 1){
for(int i = 0; i < items[now].length; i++){
if(result.size() == 0){
resultNow.add(""+items[now][i]);
}else{
for(int j = 0; j < result.size(); j++){
resultNow.add(result.get(j) + items[now][i]);
}
}
}
result = resultNow;
}
}
return result;
}
}