gpt4 book ai didi

java - 了解按位条件检查以获取传递的数组中所有可能的组合总和

转载 作者:行者123 更新时间:2023-11-29 05:49:57 25 4
gpt4 key购买 nike

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

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);
}
}

}
}

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

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

最佳答案

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

外层循环遍历这些数字(1 << N == 2N)。

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

1<<j给你一个数字,其中只有 j第 bit 为 1,i & (1 << j)重置 i 的所有位除了那一点,还有>检查结果不为 0。

请注意,此代码(带有 int s)仅适用于 N < 31。

关于java - 了解按位条件检查以获取传递的数组中所有可能的组合总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14314281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com