文章目录
一、思路
以1,2,3三个数全排列为例:
共有6种情况如下
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
观察特点:
每一个数字都会出现在首位,之后可看成是其余数字的全排列
图解
实现:
先利用for循环,使得1,2,3都开始遍历到成为首元素(即交换首元素)
之后下一位递归其余数的全排列(调用全排列函数函数)
之后回溯还原的交换元素,避免下一次时的重复
二、代码实现
import java.util.*;
public class perm{
//全排列
static void perm(int[] arr,int q,int p){
if(q==p){//判断到最后一个元素结束时进行打印
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
System.out.println();
}else{
for(int i=q;i<arr.length;i++){
//元素放置首位
int temp = arr[q];
arr[q]=arr[i];
arr[i]=temp;
perm(arr,q+1,p);
//回溯
int tt = arr[q];
arr[q]=arr[i];
arr[i]=tt;
}
}
}
public static void main(String[] args){
int[] arr = {1,2,3};
perm(arr,0,arr.length);
}
}