Java是一種非常流行的編程語言,由于其跨平臺的特性,廣泛應用于企業(yè)級開發(fā)和互聯(lián)網應用。在Java中,有時我們需要從一個數(shù)列中找出一組和為定值的m個數(shù)。下面是一個簡單的示例程序:
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; } } }
上面的示例程序使用深度優(yōu)先搜索算法,從數(shù)列中找出一組和為定值的m個數(shù)。程序中首先定義了一個數(shù)組arr,表示原始的數(shù)列,sum和m則分別表示所需要的和值和數(shù)字個數(shù)。
接著程序調用了findSum函數(shù),在其中初始化了一些參數(shù)后調用了dfs函數(shù)。dfs函數(shù)是核心部分,該函數(shù)依次枚舉每個數(shù)字,如果該數(shù)字已經被使用過,則跳過,否則將其加入答案數(shù)組,并將其記為已使用。每次枚舉之后,都調用dfs函數(shù)遞歸求解。如果當前所選的數(shù)字個數(shù)等于所需的個數(shù),且其和等于目標和,則表示找到了一組解,返回。程序使用了回溯算法,在每次遞歸回溯時重置狀態(tài)。
總體而言,上面的程序是一種簡單但有效的方法來解決在Java中從數(shù)列中找出一組和為定值的m個數(shù)的問題。