您的位置:首页 > 编程语言 > Java开发

java组合排列算法

2017-10-10 14:37 435 查看
/**
* 实现的算法
* @param a 数据数组
* @param num M选N中 N的个数(无序) Cmn
* @return
*/
public static List<String> combine(String[] a, int num) {
List<String> list = new ArrayList<String>();
StringBuffer sb = new StringBuffer();
String[] b = new String[a.length];
for (int i = 0; i < b.length; i++) {
if (i < num) {
b[i] = "1";
} else
b[i] = "0";
}

int point = 0;
int nextPoint = 0;
int count = 0;
int sum = 0;
String temp = "1";
while (true) {
// 判断是否全部移位完毕
for (int i = b.length - 1; i >= b.length - num; i--) {
if (b[i].equals("1"))
sum += 1;
}
// 根据移位生成数据
for (int i = 0; i < b.length; i++) {
if (b[i].equals("1")) {
point = i;
sb.append(a[point]);
sb.append(" ");
count++;
if (count == num)
break;
}
}
//输出数据
//            System.out.println(sb.toString());
// 往返回值列表添加数据
list.add(sb.toString());

// 当数组的最后num位全部为1 退出
if (sum == num) {
break;
}
sum = 0;

// 修改从左往右第一个10变成01
for (int i = 0; i < b.length - 1; i++) {
if (b[i].equals("1") && b[i + 1].equals("0")) {
point = i;
nextPoint = i + 1;
b[point] = "0";
b[nextPoint] = "1";
break;
}
}
// 将 i-point个元素的1往前移动 0往后移动
for (int i = 0; i < point - 1; i++)
for (int j = i; j < point - 1; j++) {
if (b[i].equals("0")) {
temp = b[i];
b[i] = b[j + 1];
b[j + 1] = temp;
}
}
// 清空 StringBuffer
sb.setLength(0);
count = 0;
}
//
System.out.println("数据长度 " + list.size());
return list;

}

传参为{“1”,“2”,“3”,“4”,“5”}和3 

结果如下:



/**
* 实现的算法
* @param ss 数据数组
* @param i M选N中 N的个数(有序) Amn
* @return
*/
private static int sum = 0;
public static void permutation(String[]ss,int i){
if(ss==null||i<0 ||i>ss.length){
return;
}
if(i==ss.length){
StringBuilder sb = new StringBuilder("");
for (int j = 0; j < ss.length; j++) {
sb.append(ss[j]+" ");
}
// System.out.println(new String(ss));
System.out.println(sb.toString()
4000
);
sum++;
System.out.println("排列组合有:"+sum);
}else{
for(int j=i;j<ss.length;j++){
// char temp=ss[j];//交换前缀,使之产生下一个前缀
String temp=ss[j];//交换前缀,使之产生下一个前缀
ss[j]=ss[i];
ss[i]=temp;
permutation(ss,i+1);
temp=ss[j]; //将前缀换回来,继续做上一个的前缀排列.
ss[j]=ss[i];
ss[i]=temp;
}
}
}
public static void main(String args[]){
// char []ss={'a','c','b'};
String[] ss = {"a","c","b"};
permutation(ss,0);
}结果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: