题目描述
blablabla
样例
class Solution {
public:
int numberOf1Between1AndN_Solution(int n) {
int count = 0;
for (int i = 1; i <= n; i *= 10) {
int a = n / i,b = n % i;
//之所以补8,是因为当百位为0,则a/10==(a+8)/10,
//当百位>=2,补8会产生进位位,效果等同于(a/10+1)
count += (a + 8) / 10 * i + ((a % 10 == 1) ? b + 1 : 0);
}
return count;
}
};
//总结一下以上的算法,可以看到,当计算右数第 i 位包含的 X 的个数时:
//取第 i 位左边(高位)的数字,乘以 10i−1,得到基础值 a。
//取第 i 位数字,计算修正值:
//如果大于 X,则结果为 a+10i−1。
//如果小于 X,则结果为 a。
//如果等 X,则取第 i 位右边(低位)数字,设为 b,最后结果为 a+b+1。
https://www.cnblogs.com/xuanxufeng/p/6854105.html
这篇博客可以解答你们的疑惑
就是打表,强加结论,哎
虽然没看懂,但是看到这长度,也只想说强
真的强,又简洁又快
tql
太强了
缓缓打出一串?????????
小白没看懂,大佬可否解释一下
就是y总的思路换个写法
https://blog.csdn.net/foolishpichao/article/details/106489980 这篇博客有