您的位置:首页 > 其它

经典递归-求一个数组中的所有组合值等于指定值的组合

2018-02-27 13:21 1956 查看

不可变数组实现案例

public class Test {

static int[] flag = new int[100];
static int index = 0;// 记录当前

public static void numGroup(int[] arr, int start, int length, int sum) {
if (sum == 0) {
for (int j = 0; j < index; j++) {
System.out.print(flag[j]+"   "+index);
}
System.out.println();
} else {
for (int i = start; i < length; i++) {
flag[index++] = arr[i];
TestStockOriginalOccupationService.numGroup(arr, i + 1, length-1, sum - arr[i]);
}
}
index--;
}
public static void main(String[] args) {
int[] arr = { 1, 3, 2, 4, 5, 6, 7, 8, 9,10,44,55,66 };
Arrays.sort(arr);
int sum = 7;
}
}


可变数组的实现方式

private static List<StockOriginalOcupationEntity> matchGlobleSooList = new ArrayList<>();
public void numGroup(List<StockOriginalOcupationEntity> dsoe, int start, int length, BigDecimal sum,List<StockOriginalOcupationEntity> matchSooList) {
if(sum.compareTo(BigDecimal.ZERO) == 0){
matchGlobleSooList.addAll(matchSooList);
}else{
for (int i = start; i < length; i++) {
matchSooList.add(dsoe.get(i));
BigDecimal dsoeIncome = dsoe.get(i).getIncome()==null?new BigDecimal(0):dsoe.get(i).getIncome();
numGroup(dsoe, i + 1, length - 1, sum.subtract(dsoeIncome),matchSooList);
}
if(matchSooList.size()>0){
matchSooList.remove(matchSooList.size()-1);
}
}
}


注:谁有更好的实现方式欢迎交流哦

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐