返回
javascript 巧妙解决“1~n整数中1出现的次数”难题
前端
2023-10-24 11:20:57
// javascript题解
// 剑指offer专栏
function NumberOf1Between1AndN_Solution(n)
{
// write code here
let res = 0
for(let i = 1; i<=n; i++)
{
let num = i
while(num>0)
{
if(num%10 === 1) res++
num = parseInt(num/10)
}
}
return res
}
剑指Offer专栏:巧妙解决“1~n整数中1出现的次数”难题(javascript实现)
题目
给定一个整数n,求从1到n的整数中1出现的次数。例如,给定n=13,从1到13的整数中1出现的次数为6,分别出现在1、10、11、12、13中。
解题思路:
这道题目的关键在于找规律。我们可以将数字按照其位数进行分类,分别讨论每种情况下的规律。
- cur>1:
当数字cur大于1时,cur中包含的1的个数等于cur中包含的1的个数乘以cur的位数。例如,123中包含的1的个数等于12中包含的1的个数乘以3。
- cur=1:
当数字cur等于1时,cur中包含的1的个数等于cur本身。例如,1中包含的1的个数等于1。
- cur<1:
当数字cur小于1时,cur中不包含1。例如,0中不包含1。
解题代码:
function NumberOf1Between1AndN_Solution(n) {
let res = 0;
for (let i = 1; i <= n; i++) {
let num = i;
while (num > 0) {
if (num % 10 === 1) res++;
num = parseInt(num / 10);
}
}
return res;
}
精讲UP主:
https://www.bilibili.com/video/BV18E411r7xu?spm_id_from=333.999.0.0
结语:
这道题目的解法看似简单,但其实蕴含着许多数学规律。通过对数字进行分类并分析每种情况下的规律,我们可以得到一个高效的解决方案。希望本文对您的学习有所帮助!