leetcode-5375-恢复数组

题目描述:

 

 

 

 解法:动态规划

class Solution:
    def numberOfArrays(self, s: str, k: int) -> int:
        n = len(s)
        dp = [0] * (n + 1)
        dp[0] = 1
        mod = 10**9 +7

        for i in range(1,n + 1):
            for j in range(i - 1 , -1, -1):
                if s[j] == "0":continue
                if int(s[j:i]) <= k:
                    dp[i] += dp[j]
                else:
                    if s[i-1] == "0" and dp[i] == 0:return 0
                    break

        return dp[-1] % mod

另;

class Solution:
    def numberOfArrays(self, s: str, k: int) -> int:
        n = len(s)
        f = [0]*(n+1)
        f[0] = 1
        m = len(str(k))
        MOD = 10**9+7
        for i in range(1, n+1):
            for j in range(1, m+1):
                if i-j >= 0:
                    if s[i-j] != '0' and int(s[i-j:i]) <= k:
                        f[i] += f[i-j]
                        f[i] %= MOD
        return f[n]

 

posted @ 2020-04-19 12:57  oldby  阅读(254)  评论(0编辑  收藏  举报