假设我们有一个数字n,我们必须计算出现在所有小于或等于n的所有非负数字中的数字1的总数。因此,如果输入为15,则输出将为8,因为包含1的数字为[1,10,11,12,13,14,15],所以有8个1。
为了解决这个问题,我们将遵循以下步骤-
ret:= 0
用于初始化i:= 1,当i <= n时,i = i * 10做-
ret = ret +(a / 10 +1)* i
ret = ret +(a / 10)* i
ret = ret +(a / 10)* i +(b + 1)
a:= n / i,b:= n mod i,x:= a mod 10
如果x与1相同,则
否则,当x等于0时,则-
除此以外
返回ret
让我们看下面的实现以更好地理解-
#include <bits/stdc++.h> using namespace std; class Solution { public: int countDigitOne(int n) { int ret = 0; for(long long int i = 1; i <= n; i*= (long long int)10){ int a = n / i; int b = n % i; int x = a % 10; if(x ==1){ ret += (a / 10) * i + (b + 1); } else if(x == 0){ ret += (a / 10) * i; } else { ret += (a / 10 + 1) *i; } } return ret; } }; main(){ Solution ob; cout << (ob.countDigitOne(15)); }
15
输出结果
8