此题算法较为简单,可对其找规律
当一个1时,仅有1个字符串由1组成
当两个1时,有3个
当三个1时,有6个
当四个1时,有10个
当五个1时,有15个
当六个1时,有21个
可设f(k)为有k个1时的字符串个数,根据上面观察可以得出 f(k+1) = f(k) + k,当k为2时,f(3) = f(2) + 2 = 3 + 3,以此类推。
代码就能轻易写出来,先遍历字符串,再统计k的值,最后求和
class Solution {
public:
int numSub(string s) {
int size = s.size();
int mod = 1e9 + 7;
int ans = 0, count = 0;
for(int i=0; i<size; i++){
if(s[i] == '1'){
count++;
ans += count;
ans = ans % mod;
}
else count = 0;
}
return ans;
}
};