Java是一種非常流行的編程語言,由于其跨平臺的特性,廣泛應用于企業級開發和互聯網應用。在Java中,有時我們需要從一個數列中找出一組和為定值的m個數。下面是一個簡單的示例程序:
public class FindSum { public static void main(String[] args) { int[] arr = {2, 4, 6, 8, 10, 12, 14}; int sum = 20; int m = 3; findSum(arr, sum, m); } public static void findSum(int[] arr, int sum, int m) { int n = arr.length; int[] ans = new int[m]; boolean[] used = new boolean[n]; dfs(arr, sum, m, ans, used, 0, 0); } public static void dfs(int[] arr, int sum, int m, int[] ans, boolean[] used, int cur, int start) { if(cur == m && sum == 0) { for(int i = 0; i< m; i++) { System.out.print(ans[i] + " "); } System.out.println(); return; } if(cur == m || sum< 0) { return; } for(int i = start; i< arr.length; i++) { if(used[i]) { continue; } used[i] = true; ans[cur] = arr[i]; dfs(arr, sum - arr[i], m, ans, used, cur + 1, i + 1); used[i] = false; } } }
上面的示例程序使用深度優先搜索算法,從數列中找出一組和為定值的m個數。程序中首先定義了一個數組arr,表示原始的數列,sum和m則分別表示所需要的和值和數字個數。
接著程序調用了findSum函數,在其中初始化了一些參數后調用了dfs函數。dfs函數是核心部分,該函數依次枚舉每個數字,如果該數字已經被使用過,則跳過,否則將其加入答案數組,并將其記為已使用。每次枚舉之后,都調用dfs函數遞歸求解。如果當前所選的數字個數等于所需的個數,且其和等于目標和,則表示找到了一組解,返回。程序使用了回溯算法,在每次遞歸回溯時重置狀態。
總體而言,上面的程序是一種簡單但有效的方法來解決在Java中從數列中找出一組和為定值的m個數的問題。