力扣(2024.06.18)

2024-06-26 1303阅读

1. 39——组合总和

力扣(2024.06.18)
(图片来源网络,侵删)

给你一个无重复元素的整数数组 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] = n + 1:
                nums[i] = n + 1
        for num in nums:
            idx = abs(num)
            if idx  0:
                nums[idx - 1] = - nums[idx - 1]
        for i in range(n):
            if nums[i] > 0:
                return i + 1
        return n + 1
VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]