zoukankan      html  css  js  c++  java
  • Leetcode 377

    int combinationSum4(vector<int>& nums, int target) {
        vector<int> dp(target + 1, 0);
        dp[0] = 1;
        for (int i = 0; i <= target; i++) {
            for (int j = 0; j < nums.size(); j++) {
                if (i < nums[j]) continue;
                dp[i] = (dp[i] >= INT_MAX - dp[i - nums[j]]) ? INT_MAX : dp[i] + dp[i - nums[j]];
            }
        }
        return dp[target];
    }
    
    作者:ikaruga
    链接:https://leetcode-cn.com/problems/combination-sum-iv/solution/377-by-ikaruga/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    如你所见这个代码不是我写的,我只是想说明一下本题的坑。

    我们的朴素思想是做一个 dp,然而你会发现这道题如果你不用 python,测试用例的结果大小直接起飞。举个例子,

    [3,33,333]
    999

    这个测试用例的最终结果是多少?

    1127975497240371557486457

    更不要说真实的测试用例不是 999,而是 10000。

    因此 AC 本题需要注意一下几点:

    第一、不要用 dp + dfs,而应该直接填完整个 dp 数组。否则 TLE。

    第二、如果某个 dp 槽位的结果可能会大于 INT_MAX,就直接将其设为 INT_MAX。因为题目限制了返回类型为 int,因此一定不会存在结果大于 INT_MAX 的测试用例。

    附上我的 python 代码:

    class Solution:
        def combinationSum4(self, nums: List[int], target: int) -> int:
            m = [0]*(target + 1)
            m[0] = 1
            for i in range(1, target + 1):
                for n in nums:
                    if i - n >= 0:
                        m[i] += m[i - n]
            return m[target]
  • 相关阅读:
    ESP8266 SDK开发
    硬件基础知识和典型应用-Altium Designer 加载SETP文件设置3D封装
    Golang 协程控制关闭
    Redis主从集群切换数据丢失问题
    Goroutine(协程)的理解
    堆和栈的概念和区别
    golang goroutine实现_golang中的Mutex设计原理详解(一)
    OpenCV cv::Mat.type() 以及各类型数据转换
    python 处理json
    python 文件|路径 常用方法
  • 原文地址:https://www.cnblogs.com/KakagouLT/p/13649360.html
Copyright © 2011-2022 走看看