找出数组中满足条件的所有组合!
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#代码!
* 任意给一数组,如{-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#代码!
相关文章推荐
- 找出所有满足如下条件的六位数:它是一个完全平方数(即为某个整数的平方);该数同时也是回文数(即该数等于它的逆序数)。(C++上机考试题2)
- 在数组中找出两数之和为10的所有组合(JAVA)
- sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
- 寻找数组中满足和为定值的两个数或所有可能组合
- JS删除一个数组中满足条件的所有数据
- 试题:找出数组中元素和为指定值的所有组合
- 给出一个数组 求任意个数的数相加的和等于给定数 输出所有满足条件的数
- 一个排好序的数组,找出两数之和为m的所有组合
- sql 多条件组合查询,并根据指定类别找出所有最小子类别的SQL语句备忘
- 从数组中找出所有组合为s的数
- leetcode-java.T015_3Sum---给定一个n个元素的数组,是否存在a,b,c三个元素,使用得a+b+c=0,找出所有符合这个条件的三元组
- 找出二叉树中满足某种条件的所有路径
- 排好序的数组中,找出两数之和为m的所有组合
- 找出一个字符数组(元素不重复)所有可能字符的组合
- 一个数组,找出两数之和为m的所有组合
- 给定一个无序整形数组,找出其中所以三个数之和为0的所有组合
- 找出二叉树中满足某种条件的所有路径
- 小小c#算法题 - 1 - 找出数组中满足条件的两个数
- 求出数组中满足给定和的所有元素组合
- 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。