例:
就如图所示,abc和def,一共有如上种可能。
那么现在开始coding核心代码
先放代码
public static List<String>curse(List<String>input){
List<String>result=new ArrayList<>();
if (input.size()==0){
return result;
}
if (input.size()==1){
String str=input.get(0);
for (int i = 0; i < str.length(); i++) {
result.add(String.valueOf(str.charAt(i)));
}
return result;
}
String head=input.get(0);
input.remove(0);
List<String>output=curse(input);
for (int i = 0; i < head.length(); i++) {
for (int j = 0; j < output.size(); j++) {
result.add(head.charAt(i)+output.get(j));
}
}
return result;
}
如上,传进来的是例如[“abc”,“def”]这样的数组,返回的是他们的排列情况。
思路
直接用主逻辑。这里适合
主逻辑:输出这一串list的排列情况,等价于把list的头部分离出来,先排列出除去头部的情况,再把头部字符串的每一个char拿出来,与其排列。
终止条件:当list的size为0时,没有排列可能,直接返回一个空list,
当list的size为1的时候,返回的结果就是把这一个string的每一个char装入结果集中返回出来。
那么下面放出所有代码
public class Solution {
public List<String> letterCombinations(String digits) {
String[]digitsMap=new String[]{""," ","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};
List<String>input=new ArrayList<>();
for (int i = 0; i < digits.length(); i++) {
input.add(digitsMap[digits.charAt(i)-'0']);
}
return curse(input);
}
public static List<String>curse(List<String>input){
List<String>result=new ArrayList<>();
if (input.size()==0){
return result;
}
if (input.size()==1){
String str=input.get(0);
for (int i = 0; i < str.length(); i++) {
result.add(String.valueOf(str.charAt(i)));
}
return result;
}
String head=input.get(0);
input.remove(0);
List<String>output=curse(input);
for (int i = 0; i < head.length(); i++) {
for (int j = 0; j < output.size(); j++) {
result.add(head.charAt(i)+output.get(j));
}
}
return result;
}
}