思路:
遍历low到high的长度,考虑最后的字符的情况,有两种情况嘛,如果长度允许,就继续减?
class Solution {
static constexpr int MOD = 1e9 + 7;
vector<int> memo;
int dfs(int len, int zero, int one) {
if(len < 0) {
return 0;
}
if(len == 0) {
return 1;
}
if(memo[len] != -1) {
return memo[len];
}
memo[len] = 0;
if (len >= zero) {
memo[len] = (memo[len] + dfs(len - zero, zero, one)) % MOD;
}
if (len >= one) {
memo[len] = (memo[len] + dfs(len - one, zero, one)) % MOD;
}
return memo[len];
}
public:
int countGoodStrings(int low, int high, int zero, int one) {
memo.resize(high + 1, -1);
int res = 0;
for(int i = low; i <= high; i++) {
res = (res + dfs(i, zero, one)) % MOD;
}
return res;
}
};
// 遍历low到high的长度,考虑最后的字符的情况,有两种情况嘛,如果长度允许,就继续减?
就是爬楼梯那感觉!
然后取模要注意,
res += (dfs(i, zero, one)) % MOD;
正确!res = (res + dfs(i, zero, one)) % MOD;