CS-Wiki CS-Wiki
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
Home
知识体系总览
  • 数据结构与算法
  • 计算机网络
  • 操作系统
  • MySQL
  • Redis
  • 设计模式
  • Java 基础
  • Java 集合
  • Java 并发
  • Java 虚拟机
  • Spring
  • Kafka
  • 校招扫盲
  • 项目推荐
  • 唠唠嗑儿
  • 读书笔记
归档
GitHub (opens new window)
  • 刷题模板汇总
  • 一些刷题小技巧
  • 整数 and 位运算

    • 整数理论基础
    • 整数除法
    • 二进制加法
    • 剑指 Offer 15 - 二进制中 1 的个数
    • 前 n 个数字二进制中 1 的个数
    • 只出现一次的数字
    • 只出现一次的数字II
    • 只出现一次的数字 III
    • 剑指 Offer 39 - 数组中出现次数超过一半的数字
    • 剑指 Offer 16 - 数值的整数次方:快速幂模板
    • 剑指 Offer 43 - 1~n 整数中 1 出现的次数
      • 📃 题目描述
      • 🔔 解题思路
      • 💥 复杂度分析
  • 数组

  • 链表

  • 哈希表

  • 字符串

  • 栈

  • 队列

  • 二叉树

  • 前缀树

  • 二分查找

  • 双指针法

  • 区间求和问题

  • 排序

  • 回溯算法

  • 贪心算法

  • 动态规划

  • 图

  • 数学

  • 自动机

  • 海量数据和空间限制

  • 05-数据结构与算法
  • 整数 and 位运算
小牛肉
2022-10-09
目录

剑指 Offer 43 - 1~n 整数中 1 出现的次数

# 📃 题目描述

题目链接:剑指 Offer 43. 1~n 整数中 1 出现的次数 (opens new window)

注意这里是十进制,而不是二进制!

# 🔔 解题思路

直接看 LeetCode 官方题解 (opens new window) 就行

我们可以从小到大枚举 k。如果 n≥10^k,说明 n 包含 10^k 对应的数位,我们就可以计算这一数位 1 的个数并累加,否则退出枚举(比如 n>=10^2(100),说明 n 是有百位的,我们就可以计算从 1 ~ n 百位上 1 的个数)。

class Solution {
    public int countDigitOne(int n) {
        int count = 0;
        
		// k = 0 表示个位,k = 10 表示十位......
        for (int k = 0; n >= Math.pow(10, k); k ++) {
            long mulk = (long) Math.pow(10, k);
            count += (n / (mulk * 10)) * mulk;

            // 剩下数的最高位有多少个 1
            long rest = n % (mulk * 10);
            // if (rest < mulk) {
            //     count += 0;
            // }
            if (rest >= mulk && rest < mulk + mulk) {
                count += rest - mulk + 1;
            }
            else if (rest >= mulk + mulk) {
                count += mulk;
            }
        }

        return count;
    }
}

# 💥 复杂度分析

  • 空间复杂度:O(1)
  • 时间复杂度:O(LogN)

🎁 公众号

各位小伙伴大家好呀,叫我小牛肉就行,目前在读东南大学硕士,上方扫码关注公众号「飞天小牛肉」,与你分享我的成长历程与技术感悟~

帮助小牛肉改善此页面 (opens new window)
Last Updated: 2023/02/16, 11:27:10
剑指 Offer 16 - 数值的整数次方:快速幂模板
数组理论基础

← 剑指 Offer 16 - 数值的整数次方:快速幂模板 数组理论基础→

最近更新
01
02
线上环境 CPU 使用率飙升如何快速排查?
03-05
03
面试官再跟你说中国没有根服务器,雪人计划让他了解下
02-23
更多文章>
Theme by Vdoing | Copyright © 2019-2023 飞天小牛肉 | 皖ICP备2022008966号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式