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

本文介绍了一种使用二进制移位实现的算法,该算法能够找出数组中所有元素组合,使得这些组合的和等于给定的目标值。通过具体实例展示了如何通过遍历和位运算来寻找所有可能的组合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 /**
     * 任意给一数组,如{-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#代码!

转载于:https://www.cnblogs.com/ljhd/archive/2009/03/26/1422350.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值