题目分析(需要结合我之前上一篇全排列文章来看)代码实现运行结果
题目 分析(需要结合我之前上一篇全排列文章来看)在之前全排列的文章进行进一步理解
之前的文章全排列是只交换起始位置和待排在第一位的元素进行互换,而其他元素不变,待第一趟全排列之后再回溯之前交换的元素位置。而这次题目要求的字典序全排列则是多了一个需求,即是在交换的起始元素位置和待交换元素的位置之间数组依次左移,相对应在一次排列后就要换成右移。
import java.util.*;
public class Main{
static void perm(char a[],int p,int q){
if(p==q){
for(int i=0;i=p;k--){
a[k+1]=a[k];
}
a[p] = temp;
perm(a,p+1,q);
char temp1 = a[p];
// a[i] = a[p];
for(int k=p+1;k<=i;k++){
a[k-1] = a[k];
}
a[i] = temp1;
}
}
}
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
char a[] = s.toCharArray();
perm(a,0,a.length);
}
}
运行结果



