zoukankan      html  css  js  c++  java
  • 力扣39.组合总数

    39. 组合总和

    给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
    candidates 中的数字可以无限制重复被选取。
    说明:
    所有数字(包括 target)都是正整数。
    解集不能包含重复的组合。
    示例 1:

    输入: candidates = [2,3,6,7], target = 7,
    所求解集为:
    [
      [7],
      [2,2,3]
    ]

    示例 2:

    输入: candidates = [2,3,5], target = 8,
    所求解集为:
    [
      [2,2,2,2],
      [2,3,3],
      [3,5]
    ]

    思路:递归回溯

    每个元素都有选择和不选择两种情况,因为每个数可以重复选择,所以选择的那个情况下标不要加一

     1 class Solution {
     2     public List<List<Integer>> combinationSum(int[] candidates, int target) {
     3         List<List<Integer>> res = new ArrayList<>();
     4         LinkedList<Integer> temp = new LinkedList<>();
     5 
     6         traceback(candidates, 0, 0, target, temp, res);
     7         return res;
     8     }
     9 
    10     public void traceback(int[] arr, int index, int nowSum, int target, LinkedList<Integer>temp, List<List<Integer>> res){
    11         // 如果index >= 数组长度,判断是否满足要求
    12         if(index >= arr.length){
    13             if(nowSum == target){
    14                 res.add(new LinkedList(temp));
    15             }
    16             return;
    17         }
    18         // 如果nowSum > target, 直接返回
    19         if(nowSum > target){
    20             return;
    21         }
    22 
    23         // 不选择
    24        traceback(arr, index + 1, nowSum, target, temp, res);
    25 
    26         // 选择该数,因为可以重复选择,所以index不加1
    27         if(nowSum + arr[index] <= target){    // 剪枝
    28             temp.addLast(arr[index]);
    29             traceback(arr, index, nowSum + arr[index], target,temp, res);
    30             temp.removeLast();  // 回溯
    31         }
    32     }
    33 }

    力扣测试时间为3ms, 空间为39.6MB

    复杂度分析:

    时间复杂度:每个元素都有选择和不选择两种情况,所以复杂度应该是O(2^n)

    空间复杂度:需要一个存放结果集的list集合,所以空间复杂度为O(k), k为解的个数

  • 相关阅读:
    KVCKVO
    音频
    静态库
    百度地图API
    CALayer
    触摸事件
    iOS中打电话、打开网址、发邮件、发短信等
    NSURLSession网络接口
    Quartz2D常见图形的绘制:线条、多边形、圆
    通知中心(NSNotificationCenter)
  • 原文地址:https://www.cnblogs.com/hi3254014978/p/13061838.html
Copyright © 2011-2022 走看看