1. 题目

输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。

例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

示例 1:
输入:n = 12
输出:5示例 2:
输入:n = 13
输出:6限制:
1 <= n < 2^31

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/1nzheng-shu-zhong-1chu-xian-de-ci-shu-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

leetcode 同题:233. 数字 1 的个数

2. 解题

同题:程序员面试金典 - 面试题 17.06. 2出现的次数(找递推规律)
LeetCode 1067. 范围内的数字计数

  • 循环,按位遍历
class Solution {public:int countDigitOne(int n) {int i = 1, count = 0, high, cur, low;while(n/i)//遍历每个位{high = n/(10*i);//高位cur = (n/i)%10;//当前位low = n-(n/i)*i;//低位if(cur == 0)count += high*i;else if(cur == 1)count += high*i+low+1;elsecount += (high+1)*i;i *= 10;}return count;}
};

递归参考:leetcode题解

class Solution {
public:int countDigitOne(int n) {if(n <= 0)return 0;string s = to_string(n);int high = s[0]-'0';int Pow = pow(10, s.size()-1);int last = n - high*Pow;if(high == 1)return countDigitOne(Pow-1)+countDigitOne(last)+last+1;// 最高位是1,如1234, 此时pow = 1000,那么结果由以下三部分构成:// (1) dfs(pow - 1)代表[0,999]中1的个数;// (2) dfs(last)代表234中1出现的个数;// (3) last+1代表固定高位1有多少种情况。elsereturn high*countDigitOne(Pow-1)+countDigitOne(last)+Pow;}
};

剑指Offer - 面试题43. 1~n整数中1出现的次数(找规律+公式)相关推荐

  1. java计算整数出现的次数_[剑指offer题解][Java]1到n整数中1出现的次数

    前言 众所周知,<剑指offer>是一本"好书". 如果你是个算法菜鸡(和我一样),那么最推荐的是先把剑指offer的题目搞明白. 对于剑指offer题解这个系列,我的 ...

  2. (待补充)【n个骰子的点数】剑指offer——面试题43:n个骰子的点数

    剑指offer--面试题43:n个骰子的点数 [注意]此题再牛客网上没有OnlineJudge,在此补充解法. 题目:把n个骰子扔在地上,所有骰子朝上一面的点数之和为s.输入n,打印出s的所有可能的值 ...

  3. 剑指offer——面试题57:删除链表中重复的结点

    剑指offer--面试题57:删除链表中重复的结点 Solution1: 删两遍,自己想的破算法.理论上时间复杂度也是O(n)O(n)O(n),并非最优解. /* struct ListNode {i ...

  4. 剑指offer——面试题55:字符流中第一个不重复的字符

    剑指offer--面试题55:字符流中第一个不重复的字符 Solution1: 当年第一次做这个题的做法 对此题最大的感想是: 1)区分deque(双端队列)和queue(队列): 2)要熟悉queu ...

  5. 两个数组中对应的下标的值合成一个新的数组_剑指 offer 面试题精选图解 03 . 数组中重复的数字

    今天分享的题目来源于 LeetCode 上的剑指 Offer 系列 面试题03. 数组中重复的数字. 题目链接:https://leetcode-cn.com/problems/shu-zu-zhon ...

  6. [剑指offer]面试题第[43]题[Leetcode][第233题][JAVA][1~n整数中1出现的次数][找规律][递归]

    [问题描述][困难] [解答思路] 1. 暴力 (超时) 逐个数统计'1'的数量 时间复杂度:O(N^2) 空间复杂度:O(1) public int countDigitOne(int n) {in ...

  7. 剑指offer 面试题3—二维数组中找数

    题目: 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 基本思想: 首先选取数组 ...

  8. 剑指Offer - 面试题4. 二维数组中的查找(双指针)

    1. 题目 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 示例 ...

  9. 剑指offer面试题16. 数值的整数次方(二分法)

    题目描述 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题. 思路 详见链接 代码 cl ...

最新文章

  1. 23Command(命令)模式
  2. Java 调用 C++ (Java 调用 dll)康哥手把手教你
  3. mysql repair 索引_mysql 问题记录(1) 全文索引查询问题及使用方法
  4. oracle 10g rac 包root.sh报错,案例:Oracle Rac root.sh报错 Failed to create keys in the OLR
  5. spring整合使用activemq
  6. java singletonlist_Java Collections singletonList()方法及示例
  7. html 显示原始文本,Json显示为HTML文本 - 不是原始格式
  8. 内存管理之memblock探寻
  9. 微信小程序常用操作(获取openid,获取电话号码,模板消息)
  10. 汽车汽配行业供应链协同管理系统一体化管理,SCM供应链提升企业竞争力
  11. Swiper轮播图片并播放背景音乐
  12. Web前端零基础入门HTML5+CSS3基础教程——了解前端
  13. Hackintosh
  14. 随机向量函数链神经网络(RVFLNN)
  15. 初中OJ1998【2015.8.3普及组模拟赛】饥饿的WZK(hunger)
  16. canvas字体加粗
  17. 二维码扫描枪中文开发指导
  18. 视频播放器 layui-ckplayer
  19. POSCMS 网站设置
  20. latex运行报错File `res.cls‘ not found.

热门文章

  1. 关于用VS写C程序运行时出现烫字以及乱码的问题的原因
  2. matlab穆尔,基于matlab(矩阵实验室)的倒立摆控制系统仿真(34页)-原创力文档
  3. C语言 字符串转结构体,字符串指针转化为结构体指针!
  4. caffe运行训练脚本时报错:Unknown bottom blob 'data' (layer 'conv1',bottom index 0)
  5. TaskTResult 多线程 多参数 返回值
  6. 2016年度 JavaScript 展望(下)
  7. SQL Server 和 Oracle 以及 MySQL 有哪些区别?
  8. Unable to open /dev/sda的原因之一
  9. 别人叫我程序猿,我称自己攻城狮。没日没夜写代码,不知何日涨工资?
  10. 【分享】Android JNI实例​