剑指offer(31)1~n整数中1出现的次数
题目描述
求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。
题目分析
这题说实话挺难的,暴力解法比较简单,主要是想到时间复杂度更好的解法很难。
第一种暴力解法,也就是逐个判断。
第二种运用了根据位数来做,逐位求解,并且对于特殊情况做下判断。
主要注意下每位0,1,>2三种情况。并且通过+8处理可以很好地把>2情况归在一起。
具体可以查看leetcode上的Number of Digit One的解答。
代码
第一种:
function NumberOf1Between1AndN_Solution(n){
let ones=0;
for(let i=0;i<=n;i++){
let num=i;
while(num){
if(num%10==1){
ones++;
}
num=~~(num/10);
}
}
return ones;
}
第二种:
function NumberOf1Between1AndN_Solution(n){
if(n<=0) return 0;
let count=0;
for(let i=1;i<=n;i*=10){
let a=~~(n/i),b=n%i;
count=count+~~((a+8)/10)*i+(a%10==1)*(b+1);
}
return count;
}
剑指offer(31)1~n整数中1出现的次数的更多相关文章
- 剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)
剑指Offer - 九度1373 - 整数中1出现的次数(从1到n整数中1出现的次数)2014-02-05 23:03 题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直 ...
- 剑指offer-面试题43-1~n整数中1出现的次数-归纳法
/* 题目: 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? 为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没 ...
- 剑指Offer - 九度1348 - 数组中的逆序对
剑指Offer - 九度1348 - 数组中的逆序对2014-01-30 23:19 题目描述: 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个 ...
- 剑指Offer - 九度1517 - 链表中倒数第k个结点
剑指Offer - 九度1517 - 链表中倒数第k个结点2013-11-30 02:57 题目描述: 输入一个链表,输出该链表中倒数第k个结点.(hint: 请务必使用链表.) 输入: 输入可能包含 ...
- 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字
剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...
- 剑指Offer - 九度1351 - 数组中只出现一次的数字
剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...
- 剑指offer:二维数组中的查找
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...
- 剑指 Offer 31. 栈的压入、弹出序列 + 入栈顺序和出栈顺序的匹配问题
剑指 Offer 31. 栈的压入.弹出序列 Offer_31 题目详情: 解析: 这里需要使用一个栈来模仿入栈操作. package com.walegarrett.offer; /** * @Au ...
- 剑指 Offer 31. 栈的压入、弹出序列
剑指 Offer 31. 栈的压入.弹出序列 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某 ...
- 【剑指Offer】数值的整数次方 解题报告(Python)
[剑指Offer]数值的整数次方 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews ...
随机推荐
- iOS UI基础-12.0 Storyboard
storyboard创建控制器 1.先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard stor ...
- 日期选择器和日期条控件 DateChooserAndDateFieldControls
日期选择器和日期条控件 书:161 <?xml version="1.0" encoding="utf-8"?> <s:Application ...
- 42.PHP--电商网站的询价插件
windows下使用php自带的mail函数实现简单的邮件发送实例(QQ亲试成功) 功能实现:通过中间邮箱把客户的需求和产品信息全部发送到公司的业务员邮箱 环境及工具: win7_64bit phps ...
- js的基本包装类型
基本包装类型(包装对象): 先看下以下代码: var s1 = "helloworld"; var s2 = s1.substr(4); 上面我们说到字符串是基本数据类型,不应该有 ...
- 初识Vue,简单的todolist
vue开发源码:https://vuejs.org/js/vue.js todolist代码: <!DOCTYPE html> <html lang="en"&g ...
- idea上将项目上传到github
1.下载并安装好git,然后配置git的path路径.再配置git的全局用户名和邮箱. 2.注册github账号,如果已经有github账号,则此步骤可以省略. 3.在idea中配置git,配置如下: ...
- JSP—连接池
1:为什么要使用连接池? 解决频繁连接释放造成的资源浪费 2:配置好的数据库连接池也是以数据源DateSource的形式存, 连接池的实现类负责建立与数据库的连接. 3:使用连接池关闭资源的区别? 使 ...
- .NET Core Tools for Visual Studio 2015 安装失败
You may be blocked from installing the .NET Core Tooling Preview 2 for Visual Studio 2015 installer ...
- 前端和后台BUG区分方法
测试工程师不只是负责发现问题,除了发现问题这种基本功外,定位问题,提出解决方案,提出预防方案也是要掌握的技能.这里先说定位问题的要求,定位问题要向深入,前提当然是对功能.产品的流程.开发方案.开发人员 ...
- bash shell 编程练习
原始文件: find /etc -name passwd 2>&1 | tee ee.log 1. cat -n 把 e.log 的文档内容加上行号后输入 e2.log 这个文档里: x ...