题解 | 整数中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)。

全部评论

相关推荐

1个小白:可以考虑投一下字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务