博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode OJ 之 Number of Digit One (数字1的个数)
阅读量:4982 次
发布时间:2019-06-12

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

题目:

Given an integer n, count the total number of digit 1 appearing in all non-negative integers less than or equal to n.

For example:

Given n = 13,
Return 6, because digit 1 occurred in the following numbers: 1, 10, 11, 12, 13.

思路:

对这个数字的每一位求存在1的数字的个数。从个位開始到最高位。

举个样例54215,比方如今求百位上的1。54215的百位上是2。能够看到xx100到xx199的百位上都是1,这里xx从0到54,即100->199, 1100->1199...54100->54199, 这些数的百位都是1,因此百位上的1总数是55*100

假设n是54125,这时因为它的百位是1,先看xx100到xx199。当中xx是0到53,即54*100, 然后看54100到54125,这是26个。所以百位上的1的总数是54*100 + 26.
假设n是54025,那么仅仅须要看xx100到xx199中百位上的1。这里xx从0到53,总数为54*100

求其它位的1的个数的方法是一样的。

代码:

class Solution {public:    int countDigitOne(int n)     {        int res=0;        long left, right, base=1;        if (n <= 0)             return 0;        while (n >= base)         {            left = n / base;   //left包括当前位            right = n % base;  //right为当前位的右半边                                    if ((left % 10) > 1)                res+= (left / 10 + 1) * base;                            else if ((left % 10) == 1)                res+= (left / 10) * base+ (right + 1);                            else                res+= (left / 10) * base;            base *= 10;        }        return res;	}		};
能够把上面三个条件合成一步,例如以下:

class Solution {public:    int countDigitOne(int n)     {        int res=0;        long left, right, base=1;        if (n<=0)             return 0;        while (n>=base)         {            left = n / base;   //left包括当前位            right = n % base;  //right为当前位的右半边                        res += ((left + 8) / 10 * base) + (left % 10 == 1) * (right + 1);            base *= 10;        }        return res;	}		};

转载于:https://www.cnblogs.com/llguanli/p/8375844.html

你可能感兴趣的文章
linux系统的远程控制方法——学神IT教育
查看>>
springboot+mybatis报错Invalid bound statement (not found)
查看>>
Linux环境下SolrCloud集群环境搭建关键步骤
查看>>
MongoDB的简单使用
查看>>
【noip2004】虫食算——剪枝DFS
查看>>
java小技巧
查看>>
POJ 3204 Ikki's Story I - Road Reconstruction
查看>>
SQL中Group By的使用
查看>>
两个表格中数据不用是一一对应关系--来筛选不同数据,或者相同数据
查看>>
js05-DOM对象二
查看>>
mariadb BINLOG_FORMAT = STATEMENT 异常
查看>>
2018 Multi-University Training Contest 10 - Count
查看>>
HDU6203 ping ping ping
查看>>
Fireworks基本使用
查看>>
Java基础常见英语词汇
查看>>
UINavigationController的视图层理关系
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
php PDO (转载)
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>