听到同学的说的一个面试题-实现12345的全排列,这道题目的解法和迷宫类似,通过递归回溯实现,下面是小弟的实现方法。
public static void main(String[] args){ int [] data={1,2,3,4,5}; boolean[] b=new boolean[data.length]; quanpailie(data, b, 0,""); } //递归实现 public static void quanpailie(int [] data,boolean[] b,int level,String str) { if(level==data.length) { System.out.println(str); return; } for(int i=0;i<data.length;i++) { if(!b[i]) { b[i]=true; quanpailie(data, b, level+1, str+data[i]); b[i]=false; } } }
另外一种解法
思路:每次从后面选出一个和第一个交换,后面的继续全排列,一次类推
public static void fullPermutation(int[] array,int start,int end) { if(start==end)//递归结束 { System.out.println(Arrays.toString(array)); } for(int i=start;i<=end;i++)//递归体 { swap(array, start, i); fullPermutation(array, start+1, end); swap(array, start, i); } } public static void swap(int[]array,int i,int j) { int temp=array[i]; array[i]=array[j]; array[j]=temp; }