题目描述
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.
import java.util.*;
public class Solution {
public ArrayList<String> letterCombinations(String digits) {
ArrayList<String> list=new ArrayList();
if(digits == null||digits.length() == 0)
{
list.add("");
return list;
}
char[][] matrix=new char[10][];
matrix[0]=" ".toCharArray();
matrix[1]=" ".toCharArray();
matrix[2]="abc".toCharArray();
matrix[3]="def".toCharArray();
matrix[4]="ghi".toCharArray();
matrix[5]="jkl".toCharArray();
matrix[6]="mno".toCharArray();
matrix[7]="pqrs".toCharArray();
matrix[8]="tuv".toCharArray();
matrix[9]="wxyz".toCharArray();
//将digits转化为整形数组;
int[] nums=new int[digits.length()];
for(int i=0;i<digits.length();i++)
{
nums[i]=digits.charAt(i)-'0';
}
// answer[i]存放nums[i]中对应数字目前代表的是它的第几个字符
int[] answer=new int[nums.length];
//total记录下标的整数所含的字符个数
int[] total={1,1,3,3,3,3,3,4,3,4};
perm(matrix,nums,answer,total,0,list);
return list;
}
public void perm(char[][] matrix,int[] nums,int[] answer,int[] total,int index,ArrayList<String> list)
{
if(index == nums.length)
{
StringBuilder sb=new StringBuilder();
for(int i=0;i<nums.length;i++)
{
sb.append(matrix[nums[i]][answer[i]]);
}
list.add(sb.toString());
return;
}
for(answer[index]=0;answer[index]<total[nums[index]];answer[index]++)
{
perm(matrix,nums,answer,total,index+1,list);
}
}
}