java、js组合排列算法

 java 组合排列算法:

public class PailieZuhe {
	public static void main(String[] args) {
		String str[] = { "A", "B", "C", "D", "E" };
		plzh(str);
	}
public static void plzh(String[] str) {
		int nCnt = str.length;
		int nBit = 1 << nCnt;
		for (int i = 1; i <= nBit; i++) {
			for (int j = 0; j < nCnt; j++) {
				if ((1 << j & i) != 0) {
					System.out.print(str[j]);
				}
			}
			System.out.println("");
		}
	}
public class CaseTest {
    public static void main(String[] args) {
        int[] ia = { 1, 2, 3, 4, 5 };
        int n = 4;
        System.out.println("排列结果 : ");
        permutation(ia, n);
        System.out.println("组合结果 : ");
        combination(ia, n);
    }

    public static void permutation(String s, int[] ia, int n) {
        if (n == 1) {
            for (int i = 0; i < ia.length; i++) {
                System.out.println(s + ia[i]);
            }
        } else {
            for (int i = 0; i < ia.length; i++) {
                String ss = "";
                ss = s + ia[i] + "";
                // 建立没有第i个元素的子数组
                int[] ii = new int[ia.length - 1];
                int index = 0;
                for (int j = 0; j < ia.length; j++) {
                    if (j != i) {
                        ii[index++] = ia[j];
                    }
                }
                permutation(ss, ii, n - 1);
            }
        }
    }

    public static void permutation(int[] ia, int n) {
        permutation("", ia, n);
    }

    public static void combination(int[] ia, int n) {
        combination("", ia, n);
    }

    public static void combination(String s, int[] ia, int n) {
        if (n == 1) {
            for (int i = 0; i < ia.length; i++) {
                System.out.println(s + ia[i]);
            }
        } else {
            for (int i = 0; i < ia.length - (n - 1); i++) {
                String ss = "";
                ss = s + ia[i] + ", ";
                // 建立从i开始的子数组
                int[] ii = new int[ia.length - i - 1];
                for (int j = 0; j < ia.length - i - 1; j++) {
                    ii[j] = ia[i + j + 1];
                }
                combination(ss, ii, n - 1);
            }
        }
    }

PHP数组内容不重复组合排列算法

function getArrSet($arrs,$_current_index=-1)
10 {
11     //总数组
12     static $_total_arr;
13     //总数组下标计数
14     static $_total_arr_index;
15     //输入的数组长度
16     static $_total_count;
17     //临时拼凑数组
18     static $_temp_arr;
19     
20     //进入输入数组的第一层,清空静态数组,并初始化输入数组长度
21     if($_current_index<0)
22     {
23         $_total_arr=array();
24         $_total_arr_index=0;
25         $_temp_arr=array();
26         $_total_count=count($arrs)-1;
27         getArrSet($arrs,0);
28     }
29     else
30     {
31         //循环第$_current_index层数组
32         foreach($arrs[$_current_index] as $v)
33         {
34             //如果当前的循环的数组少于输入数组长度
35             if($_current_index<$_total_count)
36             {
37                 //将当前数组循环出的值放入临时数组
38                 $_temp_arr[$_current_index]=$v;
39                 //继续循环下一个数组
40                 getArrSet($arrs,$_current_index+1);
41                 
42             }
43             //如果当前的循环的数组等于输入数组长度(这个数组就是最后的数组)
44             else if($_current_index==$_total_count)
45             {
46                 //将当前数组循环出的值放入临时数组
47                 $_temp_arr[$_current_index]=$v;
48                 //将临时数组加入总数组
49                 $_total_arr[$_total_arr_index]=$_temp_arr;
50                 //总数组下标计数+1
51                 $_total_arr_index++;
52             }
53 
54         }
55     }
56     
57     return $_total_arr;
58 }
js实现全排列组合算法
全排列组合算法,例如a,b,c,d进行全排列组合,则组合结果为:a,b,ab,c,ac,bc,abc,d,ad,bd,abd,cd,acd,bcd,abcd。实现思路:从数据源拿出一个元素,依次与已存在的组合数据进行组合,循环上面操作直到数据源没有数据为止。
例子:
数据源a,b,c
1.拿出a,组合数据group为空,插入数据源a元素到组合数据group,此时group=[a]
2.拿出b,组合数据group拿出a,a和b组合,得到ab,把数据源b元素、ab插入组合数据group,此时group=[a,b,ab]
3.拿出c,组合数据group拿出a、b、ab,分别与c组合,分别得到ac、bc、abc,把数据源c元素、ac、bc、abc插入组合数据group,此时group=[a,b,ab,c,ac,bc,abc]
var data = ['a','b','c','d'];
 
function getGroup(data, index = 0, group = []) {
	var need_apply = new Array();
	need_apply.push(data[index]);
	for(var i = 0; i < group.length; i++) {
		need_apply.push(group[i] + data[index]);
	}
	group.push.apply(group, need_apply);
 
	if(index + 1 >= data.length) return group;
	else return getGroup(data, index + 1, group);
}
 
console.log(getGroup(data));

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值