今天碰到一个问题。。。

qq_35894054 2017-07-25 11:56:32
一个int数组,一个int值,获取该int值在数组里的所有可能性.
int[] 数组= {20,10,40,23,30,33,12,77,70,90,67,88,80,60,50};
int 值 100
输出:20.10.40.30
70.30
........
...全文
206 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
自由自在_Yu 2017-07-25
  • 打赏
  • 举报
回复
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
qq_35894054 2017-07-25
  • 打赏
  • 举报
回复
有大神给个思路吗

51,408

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧