`

全排序算法 java

阅读更多
 import java.util.ArrayList;  
 import java.util.List;  

 public class RangeNumber  
 {  
     private char[] numbers;   //输入的字符数组  
     private List<String> list;//返回的全排列字符串数组  
     private String regex;     //过滤相邻字符串的正则式  
       

       
     public RangeNumber(char[] numbers,char[] notNear)  
     {  
         this.numbers = numbers;  
         StringBuilder sb = new StringBuilder();  
         sb.append("\\d*");  
         for(int i=0;i<notNear.length;i++)  
         {  
             sb.append("[");  
             sb.append(String.valueOf(notNear));  
             sb.append("]");  
         }  
         sb.append("\\d*");  
         regex = sb.toString();  
         System.out.println(regex);  
     }  
       
     public List range()  
     {  
         list = new ArrayList<String>();  
         int m,n;   
         m = 0;  
         n = numbers.length;  
         permutation(m,n);  
         return list;  
     }  
       
     /** 
      * 后补法全排算法 
      * @param m 数组游标 
      * @param n 字符串的长度 
      */  
     private void permutation(int m, int n)  
     {  
         int i;  
         char t;  
         if (m<n-1)   
         {   
             permutation(m+1, n);  
             for (i=m+1;i<n;i++) {  
                 t=numbers[m];  
                 numbers[m]=numbers[i];  
                 numbers[i]=t;  
                 permutation(m+1, n);  
                 t=numbers[m];  
                 numbers[m]=numbers[i];  
                 numbers[i]=t;  
             }  
         }  
         else  
         {  
             String value = String.valueOf(numbers);  
             if(!value.matches(regex))  
             {  
                 list.add(value);  
             }  
         }  
     }  
}  
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics