題目:
給你一個長度為 n
的 正 整數陣列 nums
。
如果兩個 非負 整數陣列 (arr1, arr2)
滿足以下條件,我們稱它們是 單調 陣列對:
- 兩個陣列的長度都是
n
。 arr1
是單調 非遞減 的,換句話說arr1[0] <= arr1[1] <= ... <= arr1[n - 1]
。arr2
是單調 非遞增 的,換句話說arr2[0] >= arr2[1] >= ... >= arr2[n - 1]
。- 對於所有的
0 <= i <= n - 1
都有arr1[i] + arr2[i] == nums[i]
。
請你返回所有 單調 陣列對的數目。
由於答案可能很大,請你將它對 109 + 7
取餘 後返回。
class Solution: def countOfPairs(self, nums: List[int]) -> int: MOD = 1000000007 n = len(nums) # 定義dfs(i,j)表示arr1[i]=j時填充前i-1個位置的陣列對總數 @cache def dfs(i, j): # 邊界情況 if i == 0: return 1 res = 0 # 當前nums[i-1]=k的最大範圍 max_k = min(nums[i - 1], min(j, nums[i - 1] - nums[i] + j)) for k in range(max_k + 1): res += dfs(i - 1, k) res %= MOD return res Sum = 0 # 列舉nums[n-1]所有可能填充的值 for j in range(nums[n - 1] + 1): Sum += dfs(n - 1, j) Sum %= MOD return Sum