题目:考古问题,假设以前的石碑被打碎成了很多块,每块上面都有一个或若干个字符,请你写个程序来把之前石碑上文字可能的组合全部写出来,排序按大小升序
import java.util.*;
public class test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//read
while (sc.hasNext()) {
List<String> list = new LinkedList<>();
String s = sc.nextLine();
char[] chars = s.toCharArray();
for (char c : chars) {
list.add(String.valueOf(c));
}
//主要逻辑就是列表中取出一个元素 然后放到不同的位置, 再把列表翻转,重复上面的逻辑
List<String> mergeList = new ArrayList<>();
mergeList = combination(list,mergeList);
Collections.reverse(list);
mergeList = combination(list,mergeList);
System.out.println(mergeList);
}
}
public static List<String> combination(List<String> list,List<String> mergeList){
int length = list.size();
int putIndex = 0;
for (int i = 0; i < list.size(); i++) {
String putItem = list.get(i);
list.remove(i);
while(putIndex <= length){
StringBuilder builder = new StringBuilder();
for (int j = 0; j < list.size(); j++) {
if(putIndex ==j){
builder.append(putItem);
}
builder.append(list.get(j));
}
if(putIndex >= list.size()){
builder.append(putItem);
}
if(!mergeList.contains(builder.toString())){
mergeList.add(builder.toString());
}
putIndex++;
}
list.add(i,putItem);
putIndex = 0;
}
return mergeList;
}
}
结果: