剑指 Offer II 081. 允许重复选择元素的组合

193 阅读1分钟

剑指 Offer II 081. 允许重复选择元素的组合

例如

输入: candidates = [2,3,5], target = 8
输出: [[2,2,2,2],[2,3,3],[3,5]]

搜索回溯

对于这类寻找所有可行解的题,我们都可以尝试用「搜索回溯」的方法来解决。

注意递归思想,代码的流程很难解释,自己好好品尝下就懂了

var combinationSum = function (arr, target) {
  var res = [];
  var brr = [];
  f(0, 0);
  return res;
  function f(j, sum) {
    if (sum == target) return res.push(brr.slice());
    if (sum > target) return;
    for (var i = j; i < arr.length; i++) {
      brr.push(arr[i]);
      sum += arr[i];
      f(i, sum);
      brr.pop();
      sum -= arr[i];
    }
  }
};

代码调试

var candidates = [2,3,5], target = 8
combinationSum(candidates,target)