Idea de arreglo completo 2:
Si el resultado del arreglo completo de {a, b, c} es {a, b, c}, {a, c, b} {b, a, c} {b, c, a} {c, b, a} {c, a, b}. Se puede ver que cambiamos el primer bit de la matriz de caracteres a su vez, y los dos bits restantes se pueden resolver de forma recursiva, pero cada vez que se resuelve una situación, interrumpirá su orden original, por lo que debemos regresar y volver a su original Algunos estados
El código es el siguiente:
import java.util.ArrayList;
import java.util.Scanner;
public class Qpal {
//全排列法二(多支路递归回溯)
ArrayList<String> news=new ArrayList<>();//需要将Arraylist建立为全局变量
public ArrayList<String> qpl1(String a)
{
char []b=a.toCharArray();//转为字符数组方便各个交换
ArrayList<String> news1=qpl(b,0);
return news1;
}
static void swap(char []a,int b,int c)//交换数组中的两个值
{
char temp=a[c];
a[c]=a[b];
a[b]=temp;
}
private ArrayList<String> qpl(char []a, int b)
{
if(b==a.length)//递归出口
{
news.add(new String(a));
}
for (int i=b;i<=a.length-1;i++)
{
swap(a,b,i);//交换第一位元素
qpl(a,b+1);
swap(a,b,i);//回溯
}
return news;
}
public static void main(String[] args) {
Scanner a=new Scanner(System.in);
String b=a.nextLine();//字符串输入
ArrayList<String> news=new Qpal().qpl1(b);
System.out.println(news);
}
}
Los resultados son los siguientes: