牛妹给了牛牛一个长度为 的下标从
开始的正整型数组
,粗心的牛牛不小心把其中的一些数字删除了。
假如被删除了,则
。对于所有被删除的数字,牛牛必须选择一个正整数填充上。现在牛牛想知道有多少种填充方案使得:
-
且对于所有的
满足
。
函数传入一个下标从开始的数组
和一个正整数
,请返回合法的填充方案数对
取模的值,保证不存在方案数为0的数据。
牛妹给了牛牛一个长度为 的下标从
开始的正整型数组
,粗心的牛牛不小心把其中的一些数字删除了。
假如被删除了,则
。对于所有被删除的数字,牛牛必须选择一个正整数填充上。现在牛牛想知道有多少种填充方案使得:
函数传入一个下标从开始的数组
和一个正整数
,请返回合法的填充方案数对
取模的值,保证不存在方案数为0的数据。
[0,4,5],6
4
所有的合法填充方案是:[1,4,5],[2,4,5],[3,4,5],[4,4,5],共4种。
[1,0,0],3
6
所有的合法填充方案是:[1,1,1],[1,1,2],[1,2,2],[1,2,3],[1,3,3],[1,1,3]共6种
[0,0,0,0,0,67,0,0],100
746845806
数组
满足
class Solution: def FillArray(self , a , k ): len1 = len(a) dp = [[1]*(len1+1) for _ in range(k+1)] for i in range(1, k+1): dp[i][1] = i for j in range(1, len1+1): dp[1][j] = 1 for i in range(2, k+1): for j in range(2, len1+1): dp[i][j] = dp[i][j-1] + dp[i-1][j] nums = [1]+a+[k] len2 = len(nums) start = [] end = [] for i in range(1, len2-1): if nums[i] == 0 and nums[i-1] >0: start.append(i) if nums[i] == 0 and nums[i+1] >0: end.append(i) ans = 1 for s, e in zip(start, end): ans *= dp[min(nums[e+1],k) - nums[s-1]+1][e-s+1] return ans%(10**9 + 7)