寻找和为定值的n个数(Java版)

Java基于递归的版本: 代码里有简略的注释

import java.util.*;

public class Demo {


    static ArrayList<ArrayList<Integer>> lists = new ArrayList<>();
    static LinkedList<Integer> fuck = new LinkedList<>();

    public static void main(String[] args) {
        int arr[] = new int[100];
        for(int i=0;i<100;i++){
            arr[i] = i+1;
        }
        //100是查找和为100的数字,0是数组开始位置,arr.length-1是数组结束位置
        findList(100,arr,0,arr.length-1);


        for(ArrayList list :lists){
            System.out.println(list);
        }
    }


//sun要找的和为定值的数,arr数组是找数的范围,start是标记当前递归的下标,end是用来跟start判断的如果小于start就结束递归
    public static void findList(int sum, int[] arr, int start, int end) {
        if (start >= end) {
            return;
        }
        if (sum == arr[start]) {
            ArrayList<Integer> list = new ArrayList<>();
            for(Integer num :fuck){
                list.add(num);
            }
            list.add(arr[start]);
            lists.add(list);
        } else {
            if (sum > arr[start]) {
                fuck.add(arr[start]);
                findList(sum - arr[start], arr, start + 1, end);
                fuck.remove(fuck.size()-1);
            }
            findList(sum, arr, start + 1, end);
        }
    }


}

猜你喜欢

转载自blog.csdn.net/u011328417/article/details/81156696