1. 程式人生 > >java遞迴,實現求全排列

java遞迴,實現求全排列

有1~n的n個整數,現要求打印出這n個數的所有可能的排列。比如 1 、2、3的全排列:

        1, 2, 3
        1, 3, 2
        2, 1, 3
        2, 3, 1
        3, 1, 2 

        3, 2, 1   

         我在網上找到了一個用遞迴求全排列的例子,稍微改了一下,現在貼出來,因為感覺這個例子挺有用的:

[java] view plaincopyprint?
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3. publicclass PaiLie {  
  4. /** 
  5.      * @param args 
  6.      */
  7. publicstatic
    void main(String[] args) {  
  8.             List<Integer> s=new ArrayList<Integer>();  
  9.             List<Integer> rs=new ArrayList<Integer>();  
  10. for(int i=1;i<=3;i++)  
  11.                 s.add(i);  
  12.             pl(s,rs);  
  13.     }  
  14. publicstaticvoid pl(List<Integer> s,List<Integer> rs){  
  15. if(s.size()==1)  
  16.           {  
  17.               rs.add(s.get(0));  
  18.               System.out.println(rs.toString());  
  19.               rs.remove(rs.size()-1);  
  20.           }else{  
  21. for(int i=0;i<s.size();i++){  
  22.                   rs.add(s.get(i));   
  23.                   List<Integer> tmp=new ArrayList<Integer>();  
  24. for(Integer a:s)  
  25.                      tmp.add(a);  
  26.                   tmp.remove(i);  
  27.                  pl(tmp,rs);  
  28.                  rs.remove(rs.size()-1);      
  29.               }  
  30.           }                     
  31.      }  
  32. }