1. 程式人生 > 實用技巧 >力扣演算法:組合總和III

力扣演算法:組合總和III

原題:https://leetcode-cn.com/problems/combination-sum-iii

找出所有相加之和為n 的k個數的組合。組合中只允許含有 1 -9 的正整數,並且每種組合中不存在重複的數字。

說明:

所有數字都是正整數。
解集不能包含重複的組合。
示例 1:

輸入: k = 3, n = 7
輸出: [[1,2,4]]
示例 2:

輸入: k = 3, n = 9
輸出: [[1,2,6], [1,3,5], [2,3,4]]

解題思路:

這與昨天的兩道題很相似,所以直接使用回溯的方式。明確條件即可

public List<List<Integer>> combinationSum3(int
k, int n) { List<List<Integer>> result = new ArrayList<List<Integer>>(); List<Integer> daan =new ArrayList<>(); backtrack(result,k,n,daan,1); return result; } public void backtrack(List<List<Integer>> result,int
k,int n,List<Integer> daan,int start){ if(n<0){ return; } if(k==0){ if(n==0){ result.add(new ArrayList<Integer>(daan)); return; } return; } for(int i=start;i<=9;i++){
if(n-i>=0){ daan.add(i); backtrack(result,k-1,n-i,daan,i+1); //這個最後一個引數用 start+1 不可,會出現重複數字的情況。 daan.remove(daan.size()-1); } }