力扣(2024.06.18)

1. 39——组合总和

给你一个无重复元素的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有不同组合,并以列表形式返回。你可以按任意顺序返回这些组合。candidates 中的同一个数字可以无限制重复被选取。如果至少一个数字的被选数量不同,则两种组合是不同的。 对于给定的输入,保证和为 target 的不同组合数少于 150 个。

标签:数组,回溯

代码:

class Solution:
    def combinationSum(self, candidates: List[int], target: int) -> List[List[int]]:
        def backtrack(candidates, target, sum, start, res, path):
            if sum == target:
                res.append(path.copy())
                return 
            for i in range(start, len(candidates)):
                if sum + candidates[i] > target:
                    break
                sum = sum + candidates[i]
                path.append(candidates[i])
                backtrack(candidates, target, sum, i, res, path)
                sum = sum - candidates[i]
                path.pop()
        res = []
        path = []
        candidates.sort()
        backtrack(candidates, target, 0, 0, res, path)
        return res

2. 40——组合总和2

给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。candidates 中的每个数字在每个组合中只能使用一次。注意:解集不能包含重复的组合。 

标签:数组,回溯

代码:

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        def backtrack(candidates, target, sum, start, res, path):
            if sum == target:
                res.append(path.copy())
                return
            for i in range(start, len(candidates)):
                if i > start and candidates[i] == candidates[i-1]:
                    continue
                if sum + candidates[i] > target:
                    break
                sum = sum + candidates[i]
                path.append(candidates[i])
                backtrack(candidates, target, sum, i+1, res, path)
                sum = sum - candidates[i]
                path.pop()
        res = []
        path = []
        candidates.sort()
        backtrack(candidates, target, 0, 0, res, path)
        return res

3. 41——缺失的第一个正数

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

标签:数组,哈希表

代码:

class Solution:
    def firstMissingPositive(self, nums: List[int]) -> int:
        n = len(nums)
        for i in range(n):
            if nums[i] <= 0 or nums[i] >= n + 1:
                nums[i] = n + 1
        for num in nums:
            idx = abs(num)
            if idx <= n and nums[idx - 1] > 0:
                nums[idx - 1] = - nums[idx - 1]
        for i in range(n):
            if nums[i] > 0:
                return i + 1
        return n + 1

相关推荐

  1. 12.20

    2024-06-19 02:48:01       67 阅读
  2. 12.25

    2024-06-19 02:48:01       65 阅读
  3. 134. 加油站

    2024-06-19 02:48:01       57 阅读
  4. _day1

    2024-06-19 02:48:01       57 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-19 02:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-19 02:48:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-06-19 02:48:01       82 阅读
  4. Python语言-面向对象

    2024-06-19 02:48:01       91 阅读

热门阅读

  1. Linux下tar命令解压缩

    2024-06-19 02:48:01       26 阅读
  2. 打印mybatis的sql日志

    2024-06-19 02:48:01       23 阅读
  3. 计算机网络模型

    2024-06-19 02:48:01       23 阅读
  4. Result类忘记添加@Data注解导致406错误

    2024-06-19 02:48:01       25 阅读
  5. 深拷贝和浅拷贝

    2024-06-19 02:48:01       33 阅读
  6. 扩展学习|风险沟通研究进展综述

    2024-06-19 02:48:01       24 阅读
  7. 利用Python调用闲鱼商品详情API接口

    2024-06-19 02:48:01       25 阅读
  8. 通义灵码使用笔记

    2024-06-19 02:48:01       35 阅读