🔗 https://leetcode.com/problems/count-ways-to-build-good-strings
题目
- 给四个数字,zero,one,low, high
- zero 表示字符 0 一次操作可以添加 zero 次
- one 表示字符 1 一次操作可以添加 one 次
- 返回满足以下条件的字符串的个数,mod 10^9 + 7
- 长度在 low 到 high 之间,include
思路
- DP
- dp[0] = 1
- 从 0 empty 字符串开始
- 一次操作可以添加 zero 个 0,更新长度为 now + zero 字符串的个数
- 一次操作可以添加 one 个 1, 更新长度为 now + one 字符串的个数
- 答案统计长度为 low - high 之间的所有字符串的个数
代码
class Solution {
public:
int countGoodStrings(int low, int high, int zero, int one) {
vector<int> dp(high + 1 + max(zero, one));
int mod = 1000000000 + 7;
dp[0] = 1;
for (int i = 0; i < high + 1; i++) {
dp[i + zero] += dp[i];
dp[i + zero] %= mod;
dp[i + one] += dp[i];
dp[i + one] %= mod;
}
int ans = 0;
for (int i = low; i < high + 1; i++) {
ans += dp[i];
ans %= mod;
}
return ans;
}
};