尋找陣列中和為指定數字的子陣列,可以重複,Leetcode 39
阿新 • • 發佈:2019-01-09
// 題目:給一個沒有重複元素的陣列和一個target,輸出所有和為target的元素組合,可以重複 // 解法:使用遞迴,當等於target時就將元素的組合存到List<List<Integer>> result中 public class Main { public static void main(String[] args){ List<List<Integer>> result = findNum(new int[]{1,3,5,6},8); System.out.println("complete!"); } public static List<List<Integer>> findNum(int[] input, int target){ List<List<Integer>> result = new ArrayList<List<Integer>>(); List<Integer> temp = new ArrayList<Integer>(); findNumHelper(input,0,temp,result,target); return result; } public static void findNumHelper(int[] input, int pos, List<Integer> temp, List<List<Integer>> result, int target){ for(int i = pos;i<input.length;i++){ //設定pos的意義在於下一個數字從當前數字及之後開始查詢,這樣可以避免重複結果的出現 if(target == input[i]){ //如[1,1,3],[1,3,1],因為找了3之後,就不會找3前面的數字了 temp.add(input[i]); result.add(new ArrayList<Integer>(temp)); temp.remove(temp.size()-1); return; }else if(target>input[i]){ temp.add(input[i]); findNumHelper(input,i,temp,result,target-input[i]); temp.remove(temp.size()-1); }else{ return; } } } }