题解 | 整数中1出现的次数(从1到n整数中1出现的次数)
整数中1出现的次数(从1到n整数中1出现的次数)
https://www.nowcoder.com/practice/bd7f978302044eee894445e244c7eee6
class Solution { public: int NumberOf1Between1AndN_Solution(int n) { //if(n==0) return 0; //if(n<10) return 1; vector<int> eachPos; int curTen = 1, res = 0, lastSum = 0, cnt = 0; while(n>0){ ++cnt; int temp = n%10; if(temp==1) res += lastSum+1; else if(temp>1) res += curTen; res += (curTen/10)*(cnt-1)*temp; lastSum += curTen*temp; curTen *= 10; n /= 10; } return res; } };
我的思路是解决每一个位置上面的1的个数,两个判断条件就是看当前位置为1能有多少种。
然后加上除了后面冒出来的部分,这个位的完整底下还有多少个1。
每进一位,之前的部分都是算的冒起来的部分。
初始可以假装有小数的部分,结果为0,这样就把0和一个位的也考虑进去了。
时间复杂度是O(logn),空间复杂度是O(1)。