【问题标题】:Understanding bitwise condition check for getting all possible sums of combinations in an Array paased了解按位条件检查以获取数组中所有可能的组合总和
【发布时间】:2013-01-14 06:44:09
【问题描述】:

我得到了一个算法,其目标是在一个整数数组中给出所有组合的所有可能总和。

private void arraySumPermutation(int value ,int[] arr){
    int N = arr.length;     
    for(int i=0;i<1<<N;i++){
        int sum = 0;                
        for(int j=0;j<N;j++){       

            if((i & 1<<j)>0){
                iCount++;
                sum += arr[j];  
                //S.O.P(sum);
            }
        }

    }
}

我无法理解使用按位 AND 添加的内部 if 条件。 内部 if 循环的目的是什么。

if((i & 1<<j)>0)

【问题讨论】:

    标签: java bit-manipulation bitwise-operators bit-shift bitwise-and


    【解决方案1】:

    让我们将 N 元素集合的组合表示为 N 位数,如果组合中包含 jth 项,则 jth 位为 1,否则为 0。这样,您可以将所有可能的组合表示为 [0, 2N) 范围内的数字。

    外部循环遍历这些数字 (1 &lt;&lt; N == 2N)。

    内部循环遍历集合中的项目,if 条件检查 jth 项目是否包含在当前组合中。换句话说,它检查i 的第j 位是否为1。

    1&lt;&lt;j 给你一个数字,其中只有 jth 位为 1,i &amp; (1 &lt;&lt; j) 重置 i 除该位之外的所有位,&gt; 检查结果不为 0。

    请注意,此代码(带有ints)仅适用于 N

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2012-03-20
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多