浏览 3666 次
锁定老帖子 主题:发一个全排列算法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-04-03
增加了指定几个数字不能相邻的功能,但是觉得实现不是太好,大家有何高见 import java.util.ArrayList; import java.util.List; /** * 全排列numbers * * @author laiseeme */ public class RangeNumber { private char[] numbers; //输入的字符数组 private List<String> list;//返回的全排列字符串数组 private String regex; //过滤相邻字符串的正则式 /** * 增加检索相邻字符串的正则表达式 * @param numbers * @param notNear */ 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); } } } } 如果不需要过滤相邻的字符串就改成 else { list.add(value); } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |