原来记得在这看到过一个算法的帖子,现在找不到了,希望有记录的给个链接,帖子内容大体如下:给一个整数N,求所有相加等于N的整数的组合。比如给一个整数5
1+1+1+1+1=5
2+1+1+1=5
3+1+1=5
4+1=5
2+2+1=5
2+3=5或者哪位高手给个算法解决方法

解决方案 »

  1.   

    http://topic.csdn.net/u/20091027/21/dbf6fc7a-d21c-406f-8a17-4632fc54f715.html?26346
    楼主看看这里
      

  2.   

    http://topic.csdn.net/u/20081017/00/880BD5D2-7762-4746-A66D-A1CDFDABD716.html
      

  3.   

    嘿嘿,当时好像是这个题目,后来我把它记录了下来随意给出一个数,求出一个集合(数字从给定范围里挑),这个集合里的数字加起来等于给出的这个数,问符合要求的集合一共有多少个?并打印出来 
    比如给出一个数50,要求从1—30这个范围内挑出1个或多个数字组成一个集合,这个集合里元素之和等于50 
    如:集合1,4,20,25满足条件,因为1+4+20+25=50,且每个元素都在1——30范围集合{50},{20,30},{5,20,25} {4,6,10,30}等等都满足条件 
    请问如何求出所有符合条件的集合,用什么算法效率最高?(给出的数在200以内) 
    public class T {
        public static void main(String[] args) {
            split(50, 0);
        }    static LinkedList<Integer> list = new LinkedList<Integer>();    public static void split(int n, int base) {
            if (n == 0) {
                if(list.size() == 1)
                {
                    return;
                }
                if( list.getLast() > 30)
                {
                    return;
                }
                System.out.println(list);
                return;
            }
            for (int i = base + 1; i <= n; i++) {
                list.addLast(i);
                split(n - i, i);
                list.removeLast(); // 
            }
        }}