import java.util.*; public class Main{ static int count; static int[] result; static int length; static int maxCount; public static void main(String[] args) { int[] nums={2,5,3,4,9,1}; length=nums.length; maxCount=2*(length-1); result=new int[maxCount]; int[] tempResult=new int[maxCount]; deepFun(0,nums,tempResult); for(int i=0;i<maxCount;i++){ System.out.println(result[i]); } } public static void deepFun(int index,int[] nums,int[] tempResult){ int predict=minCount(nums); if(index+predict>maxCount){ return; } if(isSorted(nums)){ if(index<maxCount){ maxCount=index; for(int i=0;i<maxCount;i++){ result[i]=tempResult[i]; } } return; } for(int i=1;i<length;i++){ reverse(nums,0,i); tempResult[index]=i; deepFun(index+1,nums,tempResult); reverse(nums,0,i); } } public static int minCount(int[] nums){ int predict=0; for(int i=1;i<length;i++){ if(Math.abs(nums[i]-nums[i-1])==1){ continue; }else{ predict++; } } return predict; } public static boolean isSorted(int[] nums){ for(int i=1;i<length;i++){ if(nums[i-1]>nums[i]){ return false; } } return true; } public static void reverse(int[] nums,int start,int end){ while(start<end){ int temp=nums[start]; nums[start]=nums[end]; nums[end]=temp; start++; end--; } } }