importjava.util.ArrayList;importjava.util.List;publicclassSumCombination{publicstaticList<List<Integer>>findSumCombinations(int n,int m){List<List<Integer>> result =newArrayList<>();backtrack(result,newArrayList<>(), n, m,0,0);return result;}privatestaticvoidbacktrack(List<List<Integer>> result,List<Integer> currentList,int n,int m,int start,int sum){if(currentList.size()== n && sum == m){
result.add(newArrayList<>(currentList));return;}if(currentList.size()< n){for(int i = start; i <= m -(n - currentList.size())* start; i++){
currentList.add(i);backtrack(result, currentList, n, m, i, sum + i);
currentList.remove(currentList.size()-1);// 回溯,移除当前尝试的数}}}publicstaticvoidmain(String[] args){int n =4;int m =10;List<List<Integer>> combinations =findSumCombinations(n, m);for(List<Integer> combination : combinations){System.out.println(combination);}}}