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 ... 
随机推荐
- Thymeleaf 总结
			在javaScript中使用表达式 var list = /*[[${list}]]*/ null; <script th:inline="javascript"> ... 
- 几种创建线程方式Thread类和Runnable接口
			对于很多想学习java的人来说,经常听别人说线程难,其实真正理解了线程后,一点都不会觉得线程难,这里我为大家梳理下线程的创建方式吧. 一.线程的创建方式有三种 1.继承Thread类 2.实现Runn ... 
- 02html基础
			02_html 1.几个标签 1.1 meta标签 meta标签的属性有name和http-equiv,其中name属性用于描述网页,对应于content(网页内容). <meta name=& ... 
- iOS --- 搜索框UISearchController的使用(iOS8.0以后替代UISearchBar+display)
			在iOS 8.0以上版本中, 我们可以使用UISearchController来非常方便地在UITableView中添加搜索框. 而在之前版本中, 我们还是必须使用UISearchBar + UISe ... 
- Eric's并发用户数估算与Little定律的等价性
			在国内性能测试的领域有一篇几乎被奉为大牛之作的经典文章,一个名叫Eric Man Wong 于2004年发表了名为<Method for Estimating the Number of Con ... 
- 用JS获取Html中所有图片文件流然后替换原有链接
			function displayHtmlWithImageStream(bodyHtml) { var imgReg = /<img.*?(?:>|\/>)/gi; var arr ... 
- Netbeans调试教程
			官方教程:Netbeans调试 CC++ 项目教程.docx 1.步过: 就是把函数当成一条指令来调用 比如上面就是光执行fun(i),不会到函数里面去 2.步入 就是进入函数里面执行 3.步出 就是 ... 
- 【整理】treeGrid 树形表格
			treeGrid 树形表格 https://fly.layui.com/extend/treeGrid/ 
- JavaSE-01  认识Java
			01 认识Java 学习要点 程序的概念 Java技术内容 使用记事本开发简单的java程序 使用输出语句在控制台输出信息 熟悉Eclipse开发环境 程序的概念 源自生活 例如五一节计划:春光明媚 ... 
- PHP将数据库的数据转换成json格式
			header('content-type:application/json;charset=utf8'); $results = array(); while ($row = mysql_f ... 
