Java 列舉陣列中任意元素和為定值的組合
阿新 • • 發佈:2019-02-06
import java.util.Arrays; /** * 列舉陣列中任意元素和為定值的組合 */ public class SolveProb { // Arrays.sort(arr); static int[] flag = new int[100]; static int index = 0;// 記錄當前 public SolveProb() { } public static void numGroupAll(int[] arr, int start, int length, int sum) { if (sum == 0) { for (int j = 0; j < index; j++) { System.out.print(flag[j]); } System.out.println(); } else if(sum>0) { for (int i = start; i < length; i++) { flag[index++] = arr[i]; SolveProb.numGroupAll(arr, i + 1, length-1, sum - arr[i]); } } index--; //若sum<0 則表示該數不滿足條件,需要index--, 因為之前假設該數滿足條件 index++找該數下一個數 } 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]); } System.out.println(); } else if(sum>0) { for (int i = start; i < length; i++) { int temp_sum=sum - arr[i]; if(temp_sum>=0) { flag[index++] = arr[i]; // System.out.println(index); SolveProb.numGroup(arr, i + 1, length-1, sum - arr[i]); } else //因為後面的數比這個大,若此時temp_sum小於0,則後面的數更不滿足條件,不用再進行迴圈 break; } } index--; // System.out.println(index); } public static void main(String[] args) { int[] arr = { 1, 3, 2, 4, 5, 6, 7, 8, 9 }; int sum = 7; //SolveProb.numGroupAll(arr, 0, arr.length, sum);//陣列未排序 Arrays.sort(arr); //對陣列進行排序後的話,可以用numGroup方法 SolveProb.numGroup(arr, 0, arr.length, sum); } }