描述
有一个考古学家发现一个石碑,但是很可惜,发现时其已经断成多段,原地发现n个断口整齐的石碑碎片。为了破解石碑内容希望有程序能帮忙计算复原后的石碑文字组合数只,你能帮忙吗?
输入描述
第一行输入n,n表示石碑碎片的个数。
第二行依次输入石碑碎片上的文字内容s,共有n组。
输出描述
输出石碑文字的组合(按照升序排列Q),行末无多余空格。
用例
输入:
a b c
输出:
acb
bca
abc
cba
bac
cab
java实现
这是一个计算全排列的问题
package com.des.data.test;
import java.util.HashSet;
public class archaeologist {
public static HashSet<String> res=new HashSet<>();
public static void main(String[] args) {
String str="a b c";
String[] arr=str.split(" ");
permut(arr, 0, arr.length-1);
for (int i = 0; i < res.toArray().length; i++) {
System.out.println(res.toArray()[i]);
}
}
/**
* 起始位置:left=0,right=arr.length-1
* @param arr
* @param left
* @param right
*/
public static void permut(String[] arr,int left,int right){
if (left==right) {
StringBuffer stres=new StringBuffer();
for (int i = 0; i < arr.length; i++) {
stres.append(arr[i]);
}
res.add(stres.toString());
}else {
for (int i = left; i <= right; i++) {
swap(arr, left, i);//交换一次
permut(arr, left + 1, right);
swap(arr, left, i);//恢复原数组
}
}
}
//交换位置
private static void swap(String[] arr,int left,int right){
String tmp=arr[left];
arr[left]=arr[right];
arr[right]=tmp;
}
}