- 电话号码的字母组合
- 题目描述
- code
电话号码的字母组合
题目描述
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。
给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。
示例:
输入:"23"
输出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].
说明:
尽管上面的答案是按字典序排列的,但是你可以任意选择答案输出的顺序。
code
package com.wangyg.leetcode;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class LeetCode17 {
@Test
public void test() {
Solution s = new Solution();
System.out.println(s.letterCombinations("23").toString());
}
class Solution {
public List<String> letterCombinations(String digits) {
List<String> list = new ArrayList<>();
String[] s = new String[digits.length()];
if (s.length == 0) {
return list;
}
for (int i = 0; i < digits.length(); i++) {
switch (digits.charAt(i)) {
case '2':
s[i] = "abc";
break;
case '3':
s[i] = "def";
break;
case '4':
s[i] = "ghi";
break;
case '5':
s[i] = "jkl";
break;
case '6':
s[i] = "mno";
break;
case '7':
s[i] = "pqrs";
break;
case '8':
s[i] = "tuv";
break;
case '9':
s[i] = "wxyz";
break;
}
}
getAllTheStrings(s, 0, list, "");
return list;
}
//获取所有的字符串
private void getAllStrings(String[] str , int index, List<String> list, String tmp){
if(index == str.length -1){
for(int i=0; i<str[index].length(); i++){
list.add(tmp+str[index].charAt(i));
}
}
}
private void getAllTheStrings(String[] str, int index, List<String> list, String temp) {
if (index == str.length - 1) { //这里是递归到最后一层时的逻辑
for (int i = 0; i < str[index].length(); i++) {
list.add(temp + str[index].charAt(i));
}
} else { //这里是递归的逻辑
for (int i = 0; i < str[index].length(); i++) { //循环+递归
getAllTheStrings(str, index + 1, list, temp + str[index].charAt(i));
}
}
}
}
}