首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

求大神来解决算法有关问题

2013-07-09 
求大神来解决算法问题。java 实现一组数任意个数相加等于 一个固定值比如 int [] i [1,2,3,4,5]固定值 6

求大神来解决算法问题。
java 实现一组数任意个数相加等于 一个固定值    比如 int [] i = [1,2,3,4,5];   固定值 6 输出  数组中任意相加等于6,不限制个数和重复。要求固定值参数化。求给力大神解决下,谢谢。 算法 Java
[解决办法]

public static void main(String[] args) {
        int[] a = { 1,3,4,5,8,7,8,10,34};
        for (int n = 1; n <= a.length; n++) {
            int[] b = new int[n];
            submit(a, 0, 0, n, b);
        }
    }
 
    public static void submit(int[] a, int c, int i, int n, int[] b) {
        for (int j = c; j < a.length - (n - 1); j++) {
            int sum = 0 ;
            b[i] = a[j];
            if (n == 1) {
                //System.out.println();
                for(int k=0;k<b.length;k++){
                    sum+= b[k];
                }
                if(sum==25){//在这里判断
                    System.out.println(Arrays.toString(b));
                }
            } else {
                n--;
                i++;
                submit(a, j + 1, i, n, b);
                n++;
                i--;
            }
        }
    }

[解决办法]
import java.util.LinkedList;
import java.util.List;



public class Hello {
    public static void foo(int[] elements,
                           int currentIndex,
                           int currentSum,
                           final int resultSum,
                           List<Integer> results) {
        if (currentSum > resultSum) {
            return;
        }

        if (currentSum ==  resultSum) {
            System.out.println(results);
            return;
        }

        for (int i = currentIndex; i < elements.length; ++i) {
            results.add(elements[i]);
            foo(elements, i, currentSum + elements[i], resultSum, results); // 深度遍历
            results.remove(results.size() - 1);
        }
    }

    public static void main(String[] args) {
        int[] elements = {1, 2, 3, 4, 5};
        int resultSum = 6;
        List<Integer> results = new LinkedList<Integer>();

        foo(elements, 0, 0, resultSum, results);
    }
}


输出
[1, 1, 1, 1, 1, 1]
[1, 1, 1, 1, 2]
[1, 1, 1, 3]
[1, 1, 2, 2]
[1, 1, 4]
[1, 2, 3]
[1, 5]
[2, 2, 2]
[2, 4]
[3, 3]

热点排行