题目:

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;
} };

最新文章

  1. Ubuntu 15.10搭建IPSec L2TP服务器
  2. 如何设置win7任务栏的计算机快速启动
  3. virtualbox中ubuntu和windows共享文件夹设置
  4. IOS开发之 ---- 苹果系统代码汉字转拼音
  5. isapi_rewrite运行在.net framework 4.0+iis 6.0环境下404错误解决方案
  6. Naive Bayes在mapreduce上的实现(转)
  7. ucos移植指南
  8. Sigmoid函数
  9. Antlr v4入门教程和实例
  10. SQL 高效运行注意事项(一)
  11. 在jsp中如何使用javax.servlet.http.HttpServlet,javax.servlet.GenericServlet, javax.servlet.Servlet
  12. Java基础语法入门
  13. 36_react_ui_antd
  14. html的空格和换行显示
  15. UOJ347 WC2018 通道 边分治、虚树
  16. Linux开机自启配置
  17. Django框架 (一) 虚拟环境配置及简单使用
  18. 我对于C#的想法
  19. 【JavaScript】类继承(对象冒充)和原型继承__深入理解原型和原型链
  20. 【Kafka】Consumer配置

热门文章

  1. 例题2.8 总是整数 LA4119
  2. js保留两位小数的解决的方法
  3. 去哪网实习总结:JavaWeb中文传參乱码问题的解决(JavaWeb)
  4. [Erlang危机](4.2)Remsh
  5. HDU 1160 FatMouse&amp;#39;s Speed DP题解
  6. Unity3D脚本编程--基本概念
  7. Struts2 的工作原理
  8. HMM XSS检测
  9. [十二省联考2019] 异或粽子 解题报告 (可持久化Trie+堆)
  10. 抓取git的log文件批处理命令示例