n個元素的全排列


 1 //求n個元素的全排列
 2 //abc  acb  bac  bca  cab  cba
 3 
 4 public class FullPermutation {
 5 
 6     public static void f(char[] data,int k)
 7     {//k表示當前的交換位置(關注點),與其后的元素交換
 8         
 9         if(k==data.length){//此處寫length和length-1都可以,前者會溢出但是不會有影響,后者效率更高一點
10             for(int i=0;i<data.length;i++) System.out.print(data[i]+" ");
11             System.out.println();
12         }
13         
14         for(int i=k;i<data.length;i++){
15             {char t = data[k];
16             data[k] = data[i];
17             data[i]=t;}//試探  c b a d
18             f(data,k+1);
19             {char t = data[k];
20             data[k] = data[i];
21             data[i]=t;}//回溯,換之后還要換回去 a b c d
22         }
23     }
24     
25     public static void f2(char[] data){
26         
27         if(data.length==1){
28             /*for(int i=0;i<data.length;i++)System.out.print(data[i]+" ");
29             System.out.println();*/
30             System.out.println(data);
31         }
32         
33         for(int i=0;i<data.length;i++){
34             {
35                 char t=data[0];
36                 data[0]=data[i];
37                 data[i]=t;
38                 //System.out.println(data[0]);
39             }
40             String str = new String(data);
41             f2(str.substring(1).toCharArray());
42             {
43                 char t=data[0];
44                 data[0]=data[i];
45                 data[i]=t;
46             }
47         }
48     }
49     
50     public static void main(String[] args) {
51         char[] data="ABC".toCharArray();    //將“ABCDE”這個字符串轉化成字符數組
52         //f(data,0);
53         f2(data);
54     }
55 }

Notes

此題選用了兩種方法,

第一種:使用的是f(char[] data,int k)兩個參數,重點在於k指的是當前數組中我們關注的位置

第二種:采用f2(char[] data),將char類型的數組ABC先轉變成String類型,再截取字串進行交換;

    此處我一開始使用的是 toString方法,結果當然不對,因為toString() 方法的作用是:可把一個邏輯值轉換為字符串,並返回結果;

    字符數組轉化成字符串應該使用:String str = new String(data);

而這兩種方法都要注意點:這里使用了回溯法,回溯法要注意,交換過后必須要交換回去

ps:第二種辦法暫時還沒找到如何正確打印or出口,目前只是打印出每中全排列的最后一位。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM