剑指Offer——1~n整数中1出现的次数(JS实现)

简介: 剑指Offer——1~n整数中1出现的次数(JS实现)

题目描述

image.png

解题思路

  • 本题如果采用暴力的方法一定会超时
  • 本题关键在于找规律
  • 规律如下图所示(cur>1,cur=1.cur<1三种情况)

image.png

解题代码(模拟队列)

var countDigitOne = function(n) {
    let flag = 0;
    const TotalBase = Math.pow(10,(String(n).split('').length) - 1);
    for (let i = 0; Math.pow(10,i) <= TotalBase; i++) {
        let base = Math.pow(10,i);
        let cur = Math.floor(n/base) % 10;
        let a = Math.floor(Math.floor(n/base) / 10);
        let b = n % base;
        if (cur < 1) {
            flag = flag + a * base;
        } else if (cur > 1) {
            flag = flag + (a + 1) * base;
        } else {
            flag = flag + a * base + b + 1;
        }
    }
    return flag;
};

精讲UP主

www.bilibili.com/video/av458…

总结(本题给我们的启示思路)

  • 启示一:学会通过数学规律的思想来解决本题
相关文章
|
3月前
|
存储 JSON JavaScript
「offer来了」保姆级巩固你的js知识体系(4.0w字)
该文章提供了JavaScript知识体系的全面复习资料,覆盖了从基础语法到高级特性如闭包、原型链、异步编程等多个方面,并通过大量的面试题和实例代码帮助巩固理解。
「offer来了」保姆级巩固你的js知识体系(4.0w字)
|
7月前
|
JavaScript 前端开发
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
剑指 Offer 31. 栈的压入、弹出序列 (javascript实现)
|
7月前
|
JavaScript 前端开发
JavaScript题解剑指offer : 09. 用两个栈实现队列
JavaScript题解剑指offer : 09. 用两个栈实现队列
46 0
|
JavaScript 前端开发
javascript整数千分位格式化函数
javascript整数千分位格式化函数
87 0
|
JavaScript 前端开发 安全
在 JavaScript 中将浮点数转换为整数
在 JavaScript 中将浮点数转换为整数
247 0
|
JavaScript 前端开发 程序员
《剑指 Offer(第 2 版)》树部分JavaScript题解
《剑指 Offer(第 2 版)》树部分JavaScript题解
《剑指 Offer(第 2 版)》树部分JavaScript题解
|
存储 JavaScript 前端开发
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
《剑指 Offer (第 2 版)》链表部分 JavaScript 题解
|
JavaScript 前端开发 测试技术
【Javascript - 力扣每日一题】13. 罗马数字转整数
【Javascript - 力扣每日一题】13. 罗马数字转整数
114 0
|
存储 JavaScript 算法
JS算法探险之整数
整数除法 二进制加法 前 n 个数字二进制中 1 的个数 只出现一次的数字
133 0
|
存储 JavaScript 前端开发
《剑指 Offer(第 2 版)》队列部分 JavaScript 题解
《剑指 Offer(第 2 版)》队列部分 JavaScript 题解