假设我们有一个字符串s。s包含0到9之间的数字,我们还有另一个数字k。我们必须找到s可以表示为[1,k]中数字列表的不同方式的数量。如果答案很大,则返回结果mod 10 ^ 9 + 7。
因此,如果输入像s =“ 3456” k = 500,那么输出将是7,因为我们可以表示s,例如[3,4,5,6],[34,5,6],[3, 4,56],[3,45,6],[34,56],[345,6],[3,456]
让我们看下面的实现以更好地理解-
class Solution: def solve(self, s, k): m = 10 ** 9 + 7 N = len(s) dp = [0] * (N + 1) dp[N] = 1 for i in range(N − 1, −1, −1): curr_val = 0 for j in range(i, N): curr_val = curr_val * 10 + int(s[j]) if 1 <= curr_val <= k: dp[i] = (dp[i] + dp[j + 1]) % m else: break return dp[0] ob = Solution() s = "3456" k = 500 print(ob.solve(s, k))
"3456", 500
输出结果
7