51,409
社区成员
发帖
与我相关
我的任务
分享import java.util.Stack;
public class GetAllSubsetByStack {
public static final int TARGET_SUM = 100;
private Stack<Integer> stack = new Stack<Integer>();
private int sumInStack = 0;
public void populateSubset(int[] data, int fromIndex, int endIndex) {
/*
* 检查sumInStack中的值是不是接近给定的数
*
* 如果是,则打印,否则继续循环
*/
if (sumInStack == TARGET_SUM) {
print(stack);
}
for (int currentIndex = fromIndex; currentIndex < endIndex; currentIndex++) {
if (sumInStack + data[currentIndex] <= TARGET_SUM) {
stack.push(data[currentIndex]);
sumInStack += data[currentIndex];
/*
*
*利用递归来计算下一个
*/
populateSubset(data, currentIndex + 1, endIndex);
sumInStack -= (Integer) stack.pop();
}
}
}
/**
* 打印输出组合
*/
private void print(Stack<Integer> stack) {
StringBuilder sb = new StringBuilder();
sb.append(TARGET_SUM).append(" = ");
for (Integer i : stack) {
sb.append(i).append("+");
}
System.out.println(sb.deleteCharAt(sb.length() - 1).toString());
}
public static void main(String[] args) {
int arr[] = new int[] {20,10,40,23,30,33,12,77,70,90,67,88,80,60,50};
GetAllSubsetByStack get = new GetAllSubsetByStack();
get.populateSubset(arr, 0, arr.length);
}
}
结果:
100 = 20+10+40+30
100 = 20+10+70
100 = 20+30+50
100 = 20+80
100 = 10+40+50
100 = 10+23+67
100 = 10+30+60
100 = 10+90
100 = 40+60
100 = 23+77
100 = 30+70
100 = 33+67
100 = 12+88