您的位置:首页 > 其它

找出数组中满足条件的所有组合!

2009-03-26 14:53 369 查看
/**

* 任意给一数组,如{-10,45,35,99,10,6,9,20,17,18}

* 再任意给一个值,如35.

* 请从上面的数组中找出所有的组合,使他们的和等于35.

* 例如对于上面的数组,所有的组合情况为:

* 35; -10+45;17+18;6+9+20;-10+35+10;-10+17+18+10;-10+6+9+20+10;

* 注意,每一种组合中一个数只能出现一次。

* 思路:利用排列组合原理 二进制移位实现

* 0000 0000 11 表示第一位arr[0]和第二位arr[1]数相加

*

* @param arr

* @param c

*/

public static void assemble(int[] arr, int c) {

for (int i = 1; i < 1 << arr.length; i++) { //数组集合情况 << 优先级比<大

int temp = 0;

StringBuffer buff = new StringBuffer();

for (int j = 0; j < arr.length; j++) {

if ((i & 1 << j) != 0) { //1 << j 在数组中移动, (i & 1 << j) != 0 判断数组的集合 情况。

temp += arr[j];

buff.append(arr[j]).append(",");

}

}

if (temp == c) {

System.out.println(buff.toString().substring(0, buff.length() - 1));

}

}

}

测试:

public static void main(String[] arg0) {

System.out.println(System.currentTimeMillis());

int[] array={17,18,-10,45,35,99,10,6,9,20};

Assemble.assemble(array,35);

System.out.println(System.currentTimeMillis());

}

结果:

1236673202015

17,18

-10,45

35

17,18,-10,10

-10,35,10

6,9,20

-10,10,6,9,20

1236673202031

思路:利用排列组合原理 二进制移位实现

思路来源: 一段C#代码!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐