一个数组,找出相加等于指定值的排列

package com.example.demo.test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class CombinationSum {
    public static List> findCombinations(BigDecimal[] array, BigDecimal target) {
        List> combinations = new ArrayList<>();
        findCombinations(array, target, 0, new ArrayList<>(), combinations);
        return combinations;
    }

    private static void findCombinations(BigDecimal[] array, BigDecimal target, int start, List current, List> combinations) {
        if (target.compareTo(BigDecimal.ZERO) == 0) {
            combinations.add(new ArrayList<>(current));
            return;
        }

        for (int i = start; i < array.length; i++) {
            if (array[i].compareTo(target) > 0) {
                continue;
            }
            current.add(array[i]);
            findCombinations(array, target.subtract(array[i]), i, current, combinations);
            current.remove(current.size() - 1);
        }
    }

    public static void main(String[] args) {
        BigDecimal[] array = {new BigDecimal("2.2"), new BigDecimal("3.2"), new BigDecimal("5.4"), new BigDecimal("6")};
        BigDecimal target = new BigDecimal("5.4");
        List> combinations = findCombinations(array, target);
        for (List combination : combinations) {
            System.out.println(combination);
        }
    }
}

你可能感兴趣的:(java,开发语言)