checkNum是目标值。 array是我正在查看的整数数组。我正在使用矩阵来保存True和False值以查看我可能的总和。 checkPower方法仅检查索引i + 1是否= 2 ^ n。我在编写可以使用负整数解决子集和问题的算法时遇到问题。我写了一个算法,但我不能使用它,因为随着输入大小的增加,我的内存不足。我想知道是否有人想出一个算法来解决问题。我更喜欢它是用java编写的,还是伪代码。
public static ArrayList<Integer> populateArray(boolean[][]matrix, int []array, int checkNum){
int usedElement = 0;
ArrayList<Integer>resultArray = new ArrayList<>();
for(int i = 0; i < matrix.length; i++){
if(checkPower(i+1)){
matrix[i][usedElement] = true;
usedElement++;
if(array[usedElement-1] == checkNum){
resultArray.add(array[usedElement-1]);
return resultArray;
}
}
else{
int tempSum = 0;
int remainingIndex = (int) (i - Math.pow(2, usedElement-1));
matrix[i][usedElement-1] = true;
tempSum += array[usedElement-1];
for(int k = 0 ; k < matrix[remainingIndex].length; k++){
if(matrix[remainingIndex][k]){
matrix[i][k] = true;
tempSum += array[k];
}
}
if(tempSum == checkNum){
for(int j = 0 ; j < matrix[j].length; j++){
if(matrix[i][j]){
resultArray.add(array[j]);
}
}
return resultArray;
}
}
}
return resultArray;
}