题目:对三个数字进行全排列
献上代码
import java.security.acl.Permission;
import java.util.Scanner;
import com.sun.accessibility.internal.resources.accessibility;
public class main2 {
static int[] a=new int[4];
static int[] visit={0,0,0,0};
static void Perm(int step,int n){
if(step==n+1){
for(int i=1;i<=n;i++)
{
System.out.print(a[i]);
}
System.out.print("\n");
}else {
for(int i=1;i<=n;i++)
{
if(visit[i]==0){
a[step]=i;
visit[i]=1;
Perm(step+1,n);
visit[i]=0; //回溯
}
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
Perm(1,n);
}
}
我们来讲解思路:
首先开辟一个数组放置所有可能的答案,设置visit=0 表示每个数字都没被访问过
step表示第几层,如果大于n的值,就把形成的排列输出出来。
如果小于n,就进行for循环,在for循环中依次去寻找没有被访问过的数字形成排列,形成排列数之后,递归函数回调,然后将visit重新设为0,也就是可以再次被访问,接着在原来的for循环里找下一个数字进行深度搜索,直到将所有可能找到并输出。
结果如下图: