import java.util.ArrayList;
import java.util.List;
public class LetterCombinations_17 {
private static final String[] KEYS = {"", "", "abc", "def", "ghi", "jkl", "mno", "pqrs", "tuv", "wxyz"};
List<String> solution(String digits){
List<String> combinations = new ArrayList<>();
if ( digits==null||digits.length()==0){
return combinations;
}
doCombination(new StringBuilder(),combinations,digits);
return combinations;
}
private void doCombination(StringBuilder stringBuilder, List<String> combinations, String digits) {
if (stringBuilder.length()==digits.length()){
combinations.add(stringBuilder.toString());
return;
}
//深度优先遍历整个keys的对应index的字符串所有数字
int curDigits = digits.charAt(stringBuilder.length())-'0';//找的是stringbuilder的长度所在的索引,在给定数字字符串位置
String letters = KEYS[curDigits];
for (char m : letters.toCharArray()){
stringBuilder.append(m);//添加
doCombination(stringBuilder,combinations,digits);
stringBuilder.deleteCharAt(stringBuilder.length()-1);
//删除新添加的尾部位置,23就是ad,ae,af,依次把def算完后再删掉,
// 同理234就是3层递归,就是ad循环把adg,adh,adi的ghi删除
}
}
public static void main(String[] args) {
new LetterCombinations_17().solution("23");
System.out.println("dd");
}
}
leetcode17+stringbuilder与递归
最新推荐文章于 2022-01-03 18:03:32 发布