【9月打卡~Leetcode每日一题】40. 组合总和 II(难度:中等)

作者分享了在计网课程中获得高分的经历,并对一道名为'组合总和II'的算法题目进行了探讨,该题为昨天题目的变形版,通过递归深度优先搜索实现。

40. 组合总和 II
在这里插入图片描述
昨天那道题的变形版

class Solution:
    def combinationSum2(self, candidates: List[int], target: int) -> List[List[int]]:
        def dfs(pos: int, rest: int):
            nonlocal sequence
            if rest == 0:
                ans.append(sequence[:])
                return
            if pos == len(freq) or rest < freq[pos][0]:
                return
            
            dfs(pos + 1, rest)

            most = min(rest // freq[pos][0], freq[pos][1])
            for i in range(1, most + 1):
                sequence.append(freq[pos][0])
                dfs(pos + 1, rest - i * freq[pos][0])
            sequence = sequence[:-most]
        
        freq = sorted(collections.Counter(candidates).items())
        ans = list()
        sequence = list()
        dfs(0, target)
        return ans

今天计网出成绩了,老师给了93分,排第6,最高分95(其实我觉得自己差不多能97.98来着 ),可能是自己那里写错了吧。
挺感谢这个老师的(怕乱说话引起是非,因为用“他”来代替这位可爱的老师),他本来是我通信原理的老师,考通信原理前答疑的时候我搬了个凳子在他办公桌旁边问了他1个多小时的问题,老师很耐心的一步一步给我讲。
今年其实他不是我的任课老师(但是由于种种原因,在这里涉及到一些感觉说出来不太好的事情,所以就不说了 ),然后他一个人差不多负责整个系的这门课程,所以我有问题基本上都去问这个老师,而且他很耐心的给我讲,在做实验的时候还帮我改代码,今年遇到的老师真的都特别好,可能是因为疫情原因,老师也很照顾我们这些学生,给了很多帮助,其实他们也付出了更多的课余时间来帮我们解决问题,感恩!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值