题目描述
Given a string containing digits from 2-9
inclusive, 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. Note that 1 does not map to any letters.
Note:
Although the above answer is in lexicographical order, your answer could be in any order you want.
样例
Example:
Input: "23" Output: ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
思路分析
大体就是由输入字符,确定到数组中的元素。此处有两种方法,字符转数字或字符 - '0' 。之后利用循环,字符拼接成字符串。
自认为代码没问题,可一直提示我数组越界,不知道是什么鬼......
代码
public List<String> letterCombinations(String digits) {
List<String> list = new LinkedList<String>();
if(digits.isEmpty())
return list;
String str[] = {"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
int digit = Integer.valueOf(digits);
int num1 = digit%10; //个位
int num2 = digit/10; //十位
char c1[] = str[num1].toCharArray();
char c2[] = str[num2].toCharArray();
for (int i = 0; i < c1.length; i++) {
StringBuffer stringBuffer = new StringBuffer();
for (int j = 0; j < c2.length; j++) {
stringBuffer.append(c1[i]);
stringBuffer.append(c2[j]);
list.add(stringBuffer.toString());
stringBuffer.delete(0, 2);
}
}
return list;
}
再贴一下讨论区一篇思路类似的代码
public class Solution {
String[][] refer={{},{},{"a","c","b"},{"d","e","f"},{"g","h","i"},{"j","k","l"},{"m","n","o"},{"p","q","r","s"},{"t","u","v"},{"w","x","y","z"}};
public List<String> letterCombinations(String digits) {
List<String> list=new ArrayList<String>();
if(!digits.equals("")){helper(list,digits,""); return list;}
return list;
}
private void helper(List<String> list,String digits,String s){
if(digits.length()==0){ list.add(s); return;}
int idx=Integer.parseInt(digits.substring(0, 1));
for(String k:refer[idx]){
helper(list,digits.substring(1,digits.length()),s+k);
}
return;
}