题目描述:

求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数。

分析:

找规律。

 该数字(不包括该数)以内  出现1的次数
 1  0
 10  1
 100  20
 1000  300
 2  0+1+0=1
 20  1+10+1=12
 200  20+100+20=140
 2000  300+1000+300=1600
 3  1+0=1
 30  12+1=13
 300  140+20=160

m*10^i这个数(不含这个数):

如果m=1,那么这个数以内有(m*i*10^(i-1))个1。

如果m>1,那么这个数以内有(m*i*10^(i-1)+10^i)个1。

那么如果给出一个数,我们可以拆分每一位。

例如给出的数是1213的话,那么我们可以求

1000以内1的个数+200以内1的个数+10以内1的个数+3以内1的个数,

另外我们还需要加上213再加上3,因为它们的前一个位数字都是1;而且我们还要再加上2,因为本身1213中有2个1,我们之前算的一直都是不含本身的。

更加直观的讲就是,1213,求0~999中1的个数+1000~1199中1的个数+1200~1209中1的个数+1210~1212中1的个数+1213中1的个数。

213从1000~1199、1200~1209、1210~1212中的第一个1来的。

3从1210~1212中的第三个1来的。

代码:

 class Solution {
public:
int NumberOf1Between1AndN_Solution(int n) {
int n1 = n;
int i = ; // 0的个数
int ei = ; // 10^i
int ans = ;
while(n1) {
int m = n1 % ; // 首位
ans += m * i * ei / ;
if(m > ) ans += ei;
if(m == ) ans += n % ei + ;
ei *= ;
i++;
n1 /= ;
}
return ans;
}
};

剑指Offer——整数中1出现的次数(从1到n整数中1出现的次数)的更多相关文章

  1. 【剑指Offer面试编程题】题目1349:数字在排序数组中出现的次数--九度OJ

    题目描述: 统计一个数字在排序数组中出现的次数. 输入: 每个测试案例包括两行: 第一行有1个整数n,表示数组的大小.1<=n <= 10^6. 第二行有n个整数,表示数组元素,每个元素均 ...

  2. 剑指 Offer 30. 包含min函数的栈 + 双栈实现求解栈中的最小值

    剑指 Offer 30. 包含min函数的栈 Offer_30 题目描述: 题解分析: 题目其实考察的是栈的知识,本题的目的是使用两个栈来求解最小值. 第二个栈主要用来维护第一个栈中的最小值,所以它里 ...

  3. 《剑指offer》第四十三题(从1到n整数中1出现的次数)

    // 面试题43:从1到n整数中1出现的次数 // 题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如 // 输入12,从1到12这些整数中包含1 的数字有1,10,11和12 ...

  4. 剑指Offer面试题11(Java版):数值的整数次方

    题目:实现函数double Power(double base,int exponent),求base的exponent次方.不得使用库函数,同一时候不须要考虑大数问题 1.自以为非常easy的解法: ...

  5. 剑指offer——python【第49题】把字符串转换成整数

    题目描述 将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数. 数值为0或者字符串不是一 ...

  6. 《剑指offer》第六十七题(把字符串转换成整数)

    // 面试题67:把字符串转换成整数 // 题目:请你写一个函数StrToInt,实现把字符串转换成整数这个功能.当然,不 // 能使用atoi或者其他类似的库函数. #include <ios ...

  7. 剑指Offer的学习笔记(C#篇)-- 数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数. 一 . 题目分析 该题目并不是难题,但该题目考察目的是正确的选择合适的查找方法.题目中有一个关键词是:排序数组,也就是说,该数组已经排好了,我一开始直接 ...

  8. 【Java】 剑指offer(43) 从1到n整数中1出现的次数

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例 ...

  9. 【Java】 剑指offer(39) 数组中出现次数超过一半的数字

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如 ...

  10. 【Java】 剑指offer(50-1) 字符串中第一个只出现一次的字符

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 在字符串中找出第一个只出现一次的字符.如输入"abacc ...

随机推荐

  1. shell学习笔记之命令(四)

    命令的类型:1>.外部命令:在命令提示符中执行的普通命令.2>.内置命令:内置命令是在shell内部实现的. 1.break命令 #!/bin/sh rm -rf fred* echo & ...

  2. Ubuntu安装Sublime Text 2

    参考资料:http://www.technoreply.com/how-to-install-sublime-text-2-on-ubuntu-12-04-unity/ 1.去Sublime Text ...

  3. 算法图绘制工具Graphviz

    graphviz是贝尔实验室设计的一个开源的画图工具,它的强大主要体现在“所思即所得"(WYTIWYG,what you think is what you get),这是和office的“ ...

  4. Xml解析之PULL解析 例2

    <?xml version="1.0" encoding="UTF-8"?> <books> <book id="100 ...

  5. ubuntu 12.04下apache 配置家目录地址

    apache2 最在搞前端相关的东西,上一次也记录了 Linux 下 LAMP环境的搭建,现在记录一下如果改变 apache2 的家目录地址该怎么做,改那个配置文件 修改配置文件 /etc/apach ...

  6. Entity Framework(七):Fluent API配置案例

    一.配置主键 要显式将某个属性设置为主键,可使用 HasKey 方法.在以下示例中,使用了 HasKey 方法对 Product 类型配置 ProductId 主键. 1.新加Product类 usi ...

  7. PHP高并发的解决方案

    这几天面试,被问到这样一个问题:如何解决大流量的高并发问题.起初不知所措,在查阅相关资料,以及网上大牛们的解答之后,总结出以下几点: 1.服务器,如果同时访问量超过10W的话,需要采用专用服务器来承载 ...

  8. Javascript事件监听

    FireFox : addEventListener()方法 IE : attachEvent()方法 为HTML元素添加一个事件监听, 而不是直接对元素的事件属性(如:onclick.onmouse ...

  9. C++ new delete操作符

    //new delete操作符 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; /* 1.n ...

  10. LoadRunner压力测试心得总结

    一.虚拟用户迭代一次的时间对整个压力场景的影响. 1.虚拟用户迭代一次的时间大于等于压力场景的上行周期. 此种情况,在压力场景的上行周期中,所有虚拟用户根据压力场景设置的策略全部依次运行.压力场景的上 ...