Leetcode: 1449. Form Largest Integer With Digits That Add up to Target

Posted tmortred

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode: 1449. Form Largest Integer With Digits That Add up to Target相关的知识,希望对你有一定的参考价值。

Description

Given an array of integers cost and an integer target. Return the maximum integer you can paint under the following rules:

The cost of painting a digit (i+1) is given by cost[i] (0 indexed).
The total cost used must be equal to target.
Integer does not have digits 0.
Since the answer may be too large, return it as string.

If there is no way to paint any integer given the condition, return "0".

Example

Input: cost = [6,10,15,40,40,40,40,40,40], target = 47
Output: "32211"

Note

cost.length == 9
1 <= cost[i] <= 5000
1 <= target <= 5000

分析

code

第一次提交就 AC 的代码, 
Runtime: 292 ms, faster than 60.00% of Python online submissions for Form Largest Integer With Digits That Add up to Target.
Memory Usage: 25.1 MB, less than 39.85% of Python online submissions for Form Largest Integer With Digits That Add up to Target.

class Solution(object):
    def largestNumber(self, costs, target):
        """
        :type cost: List[int]
        :type target: int
        :rtype: str
        """
        
        def mmax(a, b):
            if len(a) > len(b):
                return a
            elif len(b) > len(a):
                return b
            return max(a, b)

        helper = {}
        for i, v in enumerate(costs):
            helper[v] = str(i+1)

        dp = [‘0‘ for _ in range(target+1)]

        for k in helper:
            try:
                dp[k] = helper[k]
            except:
                continue

        r = []
        for i in range (2, min(10, target+1)):
            for j in helper:
                if j >= i or dp[i-j] == ‘0‘:
                    continue
                r.append(i)
                dp[i] = mmax(dp[i], max(dp[i-j], dp[j]) + min(dp[i-j], dp[j]))

        for i in r:
            helper.pop(i, 0)

        for i in range(10, target+1):
            for j in helper:
                if j >= i or dp[i-j] == ‘0‘:
                    continue
                dp[i] = mmax(dp[i], max(dp[j]+dp[i-j], dp[i-j]+dp[j]))
        return dp[-1]

总结

  • 比较简单的 dp ,不应该归类为 hard 级别的 dp

以上是关于Leetcode: 1449. Form Largest Integer With Digits That Add up to Target的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1449. 数位成本和为目标值的最大数字(再思考动规中的最多和恰好)

mysqldump:出现错误:1449:

Mysqldump 1449 错误解决 mysqldump: Got error: 1449

MysqlDump 出现错误:('mysql.infoschema'@'localhost')不存在(1449)

#1449 - phpMyAdmin(指定为定义者('***'@'localhost')的用户不存在)

题目1449:确定比赛名次(拓扑排序问题)