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 ...
随机推荐
- 复习Java和前端、后端框架等。
以下便是我开始复习时做的笔记.
- Include,Forward,sendRedirct的区别(转)
三者在servlet中的最大区别是: Include和Forward:将当前请求转到另外一个JSP或者servlet处理. sendRedirct:将当前请求返回到浏览器,带上要redirect的UR ...
- Linux常用命令awk
awk能够处理类似csv这种按行格式的数据,对每一行record按照-F指定的分隔符切割,然后处理.默认支持空格和\t分隔符 1.统计文件里某一列数据等于某个值的个数 -0_djt10.txt 2.拼 ...
- idea使用Git提交代码时忽略指定文件或文件夹
简述 使用idea编写代码并使用git作为版本控制器的时候,常常不需要提交配置文件以及一些其他不需要提交的文件,可以使用.ignore插件来在上传的时候忽略一些文件或文件夹. 安装 注意:安装完成之后 ...
- ABP教程(四)- 开始一个简单的任务管理系统 - 实现UI端的增删改查
接上一篇:ABP教程(三)- 开始一个简单的任务管理系统 – 后端编码 1.实现UI端的增删改查 1.1添加增删改查代码 打开SimpleTaskSystem.sln解决方案,添加一个“包含视图的MV ...
- spring boot jar启动
1.依赖包输出 记得禁用热加载 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactI ...
- Properties没有被注意的地方
源起: 今天阅读源码时发现一个地方不理解: 为什么以下代码第10行 get() 之后value为null时还去 getProperty() 呢? org.springframework.util.Co ...
- AJPFX总结private关键字
private关键字 什么是private关键字? 它是一个修饰符,代表私有的意思,它可以修饰成员变量和成员方法 private关键字的特点? ...
- re匹配语法-match、search和findall
1.re.match() 匹配第一个值 列表里的值可以有多个范围,有一个符合就可以. match只匹配第一个值,所以列表里的范围是第一个值得取值范围.如果第一个值被设定好且存在,那么列表的取值范围变为 ...
- Koa--基于Node.js平台的下一代web开发框架的安装
koa 是由 Express 原班人马打造的,致力于成为一个更小.更富有表现力.更健壮的 Web 框架. 使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函 ...