多益网络2019届校招笔试
-
从n个数中取k个数,相加等于m,有多少种方法
final static int[] arr = {1, 2, 3, 4, 5, 6, 7}; final static int count = 4; final static int sum = 12; final static List<List<Integer>> record = new ArrayList<List<Integer>>(); public static void main(String[] args) { int k = 0; //代表递归深度 numRecursion(arr, 0, new ArrayList(), record, k); print(record); } public static void numRecursion(int[] arr, int startIndex, List num, List record, int k) { if (num.size() == count) { if (getSum(num) == sum) { record.add(copy(num)); } return; } for (int i = startIndex; i < arr.length; i++) { num.add(arr[i]); numRecursion(arr, i + 1, num, record, k + 1); num.remove(num.size() - 1); } } public static int getSum(List<Integer> arr) { int sum = 0; for (int i : arr) { sum += i; } return sum; } public static void print(List<List<Integer>> arr) { for (List<Integer> list : arr) { for (Integer integer : list) { System.out.print(integer + "\t"); } System.out.println("\n"); } } public static List copy(List<Integer> arr) { List temp = new ArrayList(); for (Integer integer : arr) { temp.add(integer); } return temp; }