• 算法——1~n 整数中 1 出现的次数


    输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
    例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
    leetcode

    解题思路:依次遍历每一个位的情况。即统计,小于当前数字的数中,每一个位为1的数量。

    在这里插入图片描述

    • 当前位是0:则不存小于去掉高位,当前位还有1存在的情况,所以,只需要统计高位存在的时候,当前位存在1的情况。至于为什么是加上高位的数字值,因为当前位为1的是的数量就是高位的数值啊。
    • 当前位是1:首先可以加上当前位是0的情况高位的值,因为当前为是0肯定小于是1的情况。然后加上低位的值,原理和上面一样。至于为什么要加1,就是加上了当前位为1,高位的值为0的情况。
    • 当前位大于1:数量只由高位决定,因为在当前位是1的情况下,低位可以填满,填满了都不会大于整体的数值,而上面一种情况,不能填满,填满了就超了。
    class Solution {
        public int countDigitOne(int n) {
            int res = 0;
            long i = 1;
            while(n / i > 0) {
                long high = n / (i * 10);
                long cur = (n / i) % 10;
                long low = n - high * 10 * i - cur * i;
    
                if(cur == 0) res += high * i;
                else if(cur == 1) res += high * i + low + 1;
                else res += high * i + i;
    
                i *= 10;
            }
    
            return res;
        }
    }
    
  • 相关阅读:
    修改Windows和linux系统时间
    个人随笔、收藏——(包括技术、设计思想等)
    给vue项目添加ESLint
    React文档(七)处理事件
    React文档(六)state和生命周期
    React文档(五)组件和props
    React文档(四)渲染元素
    React文档(三)介绍JSX
    React文档(二)Hello World
    React文档(一)安装
  • 原文地址:https://www.cnblogs.com/lippon/p/14117666.html
Copyright © 2020-2023  润新知