剑指 Offer 43. 1~n 整数中 1 出现的次数 + 数位模拟 + 思维

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

Offer_43

题目描述

题解分析

java代码

package com.walegarrett.offer;

/**
 * @Author WaleGarrett
 * @Date 2021/2/8 9:29
 */

/**
 * 题目详情:
 * 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
 * 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
 */
public class Offer_43 {
    public int countDigitOne(int n) {
        int high = n/10,cur = n%10, low = 0;
        int digital = 1;//digital表示数位
        int res = 0;//1的个数
        while(high!=0 || cur != 0){
            if(cur == 0){
                res += (high * digital);
            }else if(cur == 1){
                res += (high*digital + low +1);
            }else res += (high+1) * digital;
            low += cur * digital;
            cur = high %10;
            high /=10;
            digital *= 10;
        }
        return res;
    }
}
posted @   Garrett_Wale  阅读(43)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
点击右上角即可分享
微信分享提示