全排序算法

 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);  
             }  
         }  
     }  
}  
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值