Leetcode 233.数字1的个数
数字1的个数
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例:
输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。
1的总个数为1在1~n所有数中
个位数上有1的个数+十位数上有1的个数+...+亿位数上有1的个数+...
自己动手亲自找一遍规律就能得出答案:
首先,找规律:
13
个位数为1:1 11
十位数为1:10 11 12 13
1的总个数为: 2+4=6
23
个位数为1:1 11 21
十位数为1:10 11 12 13 14 15 16 17 18 19
1的总个数为:3+10=13
345
个位数为1:1 11 21 31 41 51 61 71 81 91 101 111 121 131 141 ...341
十位数为1:10 11 12 13 14 15 16 17 18 19 ...311 312 ...319
百位数为1:100 101...199
1的总个数为:100+40+35=175
进而可得通项:
通项:求某一位的1的个数
高n位*本位(比如百位就乘100)+ 0 (本位小于1)
1*本位 (本位大于1)
低n位+1 (本位等于1)
也就是说,某位(各位,十位...)1的总个数可能与其高位,低位以及自己的
值有关,具体对应情况如上
例如算12345:
个位1:1234*1+1(个位>=1加1)
十位1:123*10+10
百位1:12*100+100
千位1:1*1000+1000
万位1:2345+1
1的总个数为:8121
例如算23012:
个位1:2301*1+1
十位1:230*10+2+1 (十位=1加低位即2然后加1)
百位1:23*100 (百位为0加0)
千位1:2*1000+1000
万位1:10000
1的总个数为:19905
通俗来说,某位(个位,十位..)上1的个数=
基础数+当前位为>0,<0,=0时的情况,
而基础数为当前位前面的高位*当前位
(例如:23012,当 当前位为百位时,基础数=23(前高位)*100+上面讨论的情况)
class Solution {
public:
int countDigitOne(int n) {
int k = 1, sum = 0, curr, large, small = 0;
while (n>0){
curr = n % 10;
large = n / 10;
if (curr>1)
sum = sum + large*k + k;
else if (curr<1)
sum += large*k;
else
sum += large*k + small + 1;
small = small + curr*k;
n = n / 10;
k = k * 10;
}
return sum;
}
};
Leetcode 233.数字1的个数的更多相关文章
- Java实现 LeetCode 233 数字 1 的个数
233. 数字 1 的个数 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 1 ...
- leetcode 233. 数字 1 的个数
问题描述 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数. 示例: 输入: 13 输出: 6 解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 . 问 ...
- C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解
C#版 - Leetcode 201. 数字范围按位与(bitwise AND) - 题解 在线提交: https://leetcode.com/problems/bitwise-and-of-num ...
- LeetCode:有效三角形的个数【611】
LeetCode:有效三角形的个数[611] 题目描述 给定一个包含非负整数的数组,你的任务是统计其中可以组成三角形三条边的三元组个数. 示例 1: 输入: [2,2,3,4] 输出: 3 解释: 有 ...
- 计算1到N中包含数字1的个数
转自:http://pandonix.iteye.com/blog/204840 Mark N为正整数,计算从1到N的所有整数中包含数字1的个数.比如,N=10,从1,2...10,包含有2个数字1. ...
- [LeetCode] Number of Digit One 数字1的个数
Given an integer n, count the total number of digit 1 appearing in all non-negative integers less th ...
- 233 Number of Digit One 数字1的个数
给定一个整数 n,计算所有小于等于 n 的非负数中数字1出现的个数. 例如: 给定 n = 13, 返回 6,因为数字1出现在下数中出现:1,10,11,12,13. 详见:https://leetc ...
- LeetCode OJ 之 Number of Digit One (数字1的个数)
题目: Given an integer n, count the total number of digit 1 appearing in all non-negative integers les ...
- LeetCode() 数字1的个数
int ones = 0; for (long m = 1; m <= n; m *= 10) { long a = n/m, b = n%m; ones += (a + 8) / 10 * m ...
随机推荐
- 498 Diagonal Traverse 对角线遍历
详见:https://leetcode.com/problems/diagonal-traverse/description/ C++: class Solution { public: vector ...
- python staticmethod&classmethod
python中的这两种方法都通过修饰器来完成 静态方法: 不需要传递类对象或者类的实例 可以通过类的实例.方法名a().foo()或者类名.方法a.foo()名来访问 当子类继承父类时,且实例化子类时 ...
- Suricata的总体架构
Suricata的总体架构 报文检测系统通常四大部分,报文获取.报文解码.报文检测.日志记录:suricata不同的功能安装模块划分,一个模块的输出是另一个模块的输入,suricata通过线程将模块 ...
- .net excel 导入 导出
哎,好好的代码今天说来个实验,结果用的是office15 气死人了,网上最高office14.dll 文章转自2012年 QQ群:13615607 MR.Young protected void Bt ...
- 教你如何配置WampServer
httpdconfig 搜索deny 268行 Deny 换成Allow 在本机cmd 搜索 ipconfig 找到 本机的ip 地址 239 行 DocumentRoot "e:/mywe ...
- 如何正确理解和使用 Activity的4种启动模式
关于Activity启动模式的文章已经很多,但有的文章写得过于简单,有的则过于注重细节,本文想取一个折中,只关注最重要和最常用的概念,原理和使用方法,便于读者正确应用. Activity的启动模式有4 ...
- 混合开发之DCloud和Weex的集成及优缺点比较
记录此文时太忙,没时间整理上来.需要请私信,由于DCloud和Weex的版本及API更新过快,本次分享只是对某个版本处理.
- 飞秋软件的OA消息接口服务器
由于单位使用了飞秋,同时也使用了OA,但OA的消息系统没有飞秋方便,所以大多数人还是在用飞秋沟通.但审批等流程又在OA上,所以做了个消息接口服务器,提取OA消息自动发送到飞秋上,大大方便了工作. 正好 ...
- loadrunner:文本检查点web_reg_find和web_find两个函数的区别
web_reg_find是先注册(register)后查找的:使用时将它放在请求语句的前面. 而web_find是查找前面的请求结果:使用时将它放在请求语句的后面. 另二者的参数也完成不一样的,web ...
- Mybatis-Generator逆向生成Po,Mapper,XMLMAPPER(一)
这个地方的生成需要用到三个文件,generatorConfig.xml.mybatis-generator-core-1.3.1.jar和mysql-connector-java-5.1.29.jar ...