算法题每日一练---第72天:数字 1 的个数

简介: 给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。

5.png

一、问题描述

给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。


题目链接:数字 1 的个数


二、题目要求


样例 1

输入: n = 13
输出: 6


样例 2

输入: n = 0
输出: 0


考察

数学思想、超时优化
建议用时15~35min


三、问题分析


这一题我一拿到手就感觉不对劲,明明很简单的一道题,只需要循环统计就行了,力扣居然为它加上困难的标签。

classSolution {
public:
intcountDigitOne(intn) {
inti,k,ans=0;//初始化数据for(i=1;i<=n;i++)//循环1~n        {
k=i;
while(k)//数位中是否包含1            {
if(k%10==1)
ans++;//计数k=k/10;
            }
        }
returnans;//输出结果    }
};

所以,我的代码肯定会超时。80.png

看了题解>_<发现,这是一道规律题:

82.png

规律如下,借鉴了大佬的思路:

/**从低往高位,计算每一位的数量:第1位上的1的个数:1+(n-1)/10第2位上的1的个数:(1+(n/10-1)/10)*10第3位上的1的个数:(1+(n/100-1)/10)*100……第k+1位上的1的个数:(1+(n/(10^k)-1)/10)*(10^k)如果n的第k+1位上是1,则说明可能没有填满该位,计算第k+1位的数量时还要 -10^k+1+n%(10^k),相当于独立计算*/


四、编码实现


classSolution {
public:
intcountDigitOne(intn) {
longlongk=1,ans=0;//初始化数据while (n>=k){
ans+= (1+(n/k-1)/10)*k;//计数if (n/k%10==1) ans=ans-k+1+n%k;//当前位为1,减去数据k*=10;
        }
returnans;//输出结果    }
};


五、测试结果81.png

相关文章
|
1月前
|
算法 Java 程序员
【算法每日一练及解题思路】有n级台阶,一次只能上1级或2级,共有多少种走法?
本文深入解析了“爬楼梯问题”,探讨了递归与迭代两种解法,并提供了Java代码实现。通过分析问题本质,帮助读者理解动态规划技巧,提高解决实际编程问题的能力。关键词:Java, 算法, 动态规划, 爬楼梯问题, 递归, 迭代。
65 0
算法练习第九天——只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
|
机器学习/深度学习 存储 算法
算法打卡Day23_leetcode _136. 只出现一次的数字
算法打卡Day23_leetcode _136. 只出现一次的数字
算法打卡Day23_leetcode _136. 只出现一次的数字
|
JavaScript 算法 前端开发
【前端算法】JS实现数字千分位格式化
JS实现数字千分位格式化的几种思路,以及它们之间的性能比较
343 1
|
机器学习/深度学习 算法 数据建模
K近邻算法识别数字---OpenCV-Python开发指南(40)
K近邻算法识别数字---OpenCV-Python开发指南(40)
173 0
K近邻算法识别数字---OpenCV-Python开发指南(40)
|
存储 算法 Java
算法打卡Day5_lecode_448. 找到所有数组中消失的数字
算法打卡Day5_lecode_448. 找到所有数组中消失的数字
算法打卡Day5_lecode_448. 找到所有数组中消失的数字
|
算法 Java
Map与Set高频面试算法题(只出现一次的数字,复制带随机指针的链表,宝石与石头,旧键盘,前k个高频单词)(Java实现)
给一个非空整数数组,只有一个元素出现了一次,剩余的元素都出现了两次,,请找出那个只出现一次的数字
Map与Set高频面试算法题(只出现一次的数字,复制带随机指针的链表,宝石与石头,旧键盘,前k个高频单词)(Java实现)
|
存储 前端开发 算法
LeetCode只出现一次的数字使用JavaScript解题|前端学算法
LeetCode只出现一次的数字使用JavaScript解题|前端学算法
136 0
|
算法 PHP
力扣(LeetCode)算法题解:1365. 有多少小于当前数字的数字
力扣(LeetCode)算法题解:1365. 有多少小于当前数字的数字
138 0