1. 程式人生 > 其它 >力扣216(組合總和)

力扣216(組合總和)

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, int
n) { 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; } } }