发一个全排列算法

发一个全排列算法,面试时可能会用到,输入一个字符串,返回所有的排列
增加了指定几个数字不能相邻的功能,但是觉得实现不是太好,大家有何高见

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);

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值