力扣216(組合總和)
阿新 • • 發佈:2021-10-14
216、組合總和II
基本思想:
回溯法
具體實現:
剪枝優化:
1.元素總和大於目標值,在遞迴終止的地方剪枝
2.和77題思路一樣,for迴圈的範圍剪枝
程式碼:
class Solution { List<List<Integer>> result = new ArrayList<>(); LinkedList<Integer> path = new LinkedList<>(); public List<List<Integer>> combinationSum3(int k, intn) { backTracking(n, k, 1, 0); return result; } private void backTracking(int targrtSum, int k, int startIndex, int sum){ if(sum > targrtSum){ return;//剪枝 } if (path.size() == k){ if (sum == targrtSum) { result.add(new ArrayList<>(path)); } return; } for (int i = startIndex; i <= 9 - (k - path.size()) + 1; i++){ path.add(i); sum += i; backTracking(targrtSum,k,i+1,sum); path.removeLast(); sum -= i; } } }