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);
}
}
}
}
全排序算法
最新推荐文章于 2025-11-24 15:27:16 发布
本文介绍了一种使用Java实现的字符全排列算法,并通过正则表达式过滤不符合条件的排列组合。该算法适用于需要生成所有可能组合并排除特定相邻字符的情况。
1816

被折叠的 条评论
为什么被折叠?



