【剑指Offer】1~n整数中1出现的次数
发布日期:2022-02-10 08:55:15 浏览次数:34 分类:技术文章

本文共 665 字,大约阅读时间需要 2 分钟。

题目

输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。

例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

思路

我们假设高位为high,当前位为cur,低位为low,i代表着需要统计的位置数(1对应个位,10对应十位,100对应百位),则对每一位的个数count有:

cur=0,count = high*i;
cur=1,count=high*i+low+1;
cur>1,count=high*i+i
最终累加所有位置上的个数即最终答案。

代码

class Solution {public:    int countDigitOne(int n) {        long m = 1;        int sum = 0;        while(n/m!=0){            int a = (n / m) % 10;            if(a == 0){                sum += (n/(m*10))*m;            }else if(a == 1){                sum += (n/(m*10))*m + n%m + 1;            }else{                sum += (n/(m*10))*m + m;            }            m = m * 10;        }        return sum;    }};

 

转载地址:https://blog.csdn.net/hanmin822/article/details/105825259 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【剑指Offer】数据流中的中位数
下一篇:【剑指Offer】包含min函数的栈

发表评论

最新留言

路过按个爪印,很不错,赞一个!
[***.219.124.196]2024年04月19日 12时08分39秒