题目要求:
有1,2,2,3,4,5这6个数字,用Java写一个main函数,打印出所有不同的排列,如:512234。其中:'4’不能在第三位, '3’与’5’不能相连
排列原理:
直接上代码:
import java.util.Arrays;
public class AllRank {
//记录排列组合数
static int count=0;
public static void main(String[] args) {
//得到数组
int[] arr={1,2,2,3,4,5};
rank(arr,0);
}
private static void rank(int[] arr, int index) {
//判断是否选择完
if (index==arr.length){
print(arr);
}else for (int k = 0; k < arr.length-1; k++) {
//取值 临时变量,保存没被取得值(把球取出盒子)
int temp=arr[index];
arr[index]=arr[k];
arr[k]=temp;
//递归调用函数
rank(arr,index+1);
//为了能让数字逐个排序
//比如说:[1,2,2,3,4,5]->[1,2,3,2,4,5]排列完成后将数组回退成[1,2,2,3,4,5],然后再排下一个数字-->[1,2,4,3,2,5],这样以此类推
//回退(把球放回盒子进行下一轮)
temp=arr[k];
arr[k]=arr[index];
arr[index]=temp;
}
}
private static void print(int[] arr) {
//第三个位置不能是4,35不能相邻
if(arr[2] == 4){
//直接结束当前方法
return;
}else for (int j = 1;j<arr.length-1;j++){ //从第二个数字开始,第五个数字结束, 当该数字为3时,它的前后不能为5,当该数字为5时,它的前后不能为3 arr[j-1]和arr[j+1]
//两种情况 3 或 5
if (arr[j] == 3){
if (arr[j-1] == 5|| arr[j+1] == 5){
return;
}
}
if (arr[j] == 5){
if (arr[j-1] == 3|| arr[j+1] == 3){
return;
}
}
}
System.out.println(Arrays.toString(arr));
}
}