数字 1 出现的个数

news/2024/10/5 0:29:28 标签: 算法

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

示例 1:

输入:n = 13
输出:6

示例 2:

输入:n = 0
输出:0

提示:

  • 0 <= n <= 109
class Solution {
public:
   int countDigitOne(int n) {
    int count = 0;
    long long factor = 1;  // 用于表示 10^x,从个位开始逐位分析
    while (n / factor > 0) {
        long long lower = n % factor;  // 低位
        long long current = (n / factor) % 10;  // 当前位
        long long higher = n / (factor * 10);  // 高位

        if (current == 0) {
            count += higher * factor;
        } else if (current == 1) {
            count += higher * factor + lower + 1;
        } else {
            count += (higher + 1) * factor;
        }

        factor *= 10;
    }
    return count;
}

};

 找规律:

  •  current == 0:当前位为 0 时,1 出现的次数为 higher * factor。factor表示一个 10 的幂次。举例:对于10的个位数上可能出现的只有1一种,对于100的十位数上可能出现的有10到19共10种

  •  current > 1:当前位大于 1 时,1 在这一位上出现的次数为 (higher + 1) * factor。例如:12的个位数有1的有1,11两种;120的十位数上有1的有10到19和110到119共20种

  •  current == 1:当前位是 1 的次数除了与高位相关,还与低位相关。当前位等于 1 时,1 出现的次数为 higher * factor + (lower + 1)。例如2143的百位数有1的情况相当于2100的情况加上所有低位上的组合( 2100, 2101, ..., 2143,从0到43共44种).


http://www.niftyadmin.cn/n/5690502.html

相关文章

ZLMediaKit编译运行

ZLMediaKit-github官网 快速开始 代码依赖与版权声明 MediaServer支持的HTTP MediaServer支持的HTTP HOOK API cd ZLMediaKit mkdir build cd build cmake … && make -j20 cd ZLMediaKit/release/linux/Debug ./MediaServer //./MediaServer -h 查看 //./MediaSe…

前端媒体查询的用法及案例

媒体查询&#xff1a;实现响应式设计的强大工具 在数字时代&#xff0c;网页必须适应各种设备和屏幕尺寸&#xff0c;以满足用户不断变化的需求。这就是响应式设计的重要性所在&#xff0c;而媒体查询&#xff08;Media Queries&#xff09;则是实现这一目标的强大工具。本文将…

QT学习笔记2.1(安装部署_QT Creator安装)

QT学习笔记2.1&#xff08;QT Creator安装&#xff09; 我目前主要使用msvc进行编译运行。 Qt Creator 的下载与安装 - wenglabs - 博客园 Qt - Qt Creator下载与安装 - [BORUTO] - 博客园 Qt 添加MSVC2017编译器&#xff08;2022年保姆级教程&#xff0c;不安装完整VS&#x…

0基础学习CSS(十六)尺寸和Display(显示) 与 Visibility(可见性)

CSS 尺寸 (Dimension) 所有CSS 尺寸 (Dimension)属性 属性描述height设置元素的高度。line-height设置行高。max-height设置元素的最大高度。max-width设置元素的最大宽度。min-height设置元素的最小高度。min-width设置元素的最小宽度。width设置元素的宽度。 CSS Display(显…

区块链的编程语言有那些?

区块链的编程语言有那些&#xff1f; 区块链的开发语言多样&#xff0c;各种编程语言在区块链项目中都有其独特的应用和优势。以下是一些在区块链开发中较为常见的编程语言及其特点&#xff1a; Solidity&#xff1a; 是一种为智能合约编写的编程语言&#xff0c;特别是在以太…

进程状态及优先级

目录 一、进程状态 二、进程优先级 三、Linux内核进程调度队列 一、进程状态 在一般的教科书中&#xff0c;都会对进程有以下的分类&#xff1a; 至于落实到Linux&#xff0c;进程的状态是什么样子的呢&#xff1f; //这是Linux中对进程状态的描述 /* * The task state arra…

LeetCode hot100---双指针专题(C++语言)

双指针 (1)快慢双指针 适用于使用双指针进行元素移动&#xff0c;覆盖(2)首尾双指针 计算区域面积&#xff0c;三数之和1、移动0 &#xff08;1&#xff09;题目描述以及输入输出 (1)题目描述: 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#…

07.useDefault

在 React 应用开发中,处理状态的默认值和空值情况是一个常见需求。useDefault 钩子提供了一种优雅的方式来管理状态,同时为空值(null 或 undefined)提供默认回退值。这个自定义钩子不仅简化了状态管理,还提高了代码的可读性和健壮性。以下是如何实现和使用这个自定义钩子:…