Leecode面试题43. 1~n整数中1出现的次数

简介: Leecode面试题43. 1~n整数中1出现的次数

输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。

例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。

示例 1:

输入:n = 12

输出:5

示例 2:

输入:n = 13

输出:6

限制:

1 <= n < 2^31

解题思路:利用动态规划的思想来解决这个题

每次用 n / i并用一个变量将其存储起来,同时将它的余数存储起来,这个余数可以用来得到它离最近一个(向下取整)整除10的1的个数

class Solution {
    public int countDigitOne(int n) {
        int count = 0;
        for(int i = 1; i <= n; i *= 10){
           //取的 n除以i 的商的整数部分
            int number = n/i;
            //取的n除以i 的余数部分
            int remainder = n%i;
            //取的number个位数部分
            int d = number%10;
            //取的number 除以 10 的商的整数部分
            int xyz = number/10;
            //计算1出现的次数
            count += xyz*i;
            if(d > 1) count += i;
            if(d == 1) count += remainder+1;
            if(xyz == 0) break;
        }
        return count;
    }
}

提交记录如下:


相关文章
|
3月前
|
搜索推荐 索引 Python
【面试题】缺失的第一个整数
【面试题】缺失的第一个整数
33 0
|
6月前
|
Python
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
2024年最新【Python】常见的 数据类型:整数类型,Python面试题整理最新
|
6月前
|
算法
【一刷《剑指Offer》】面试题 11:数值的整数次方
【一刷《剑指Offer》】面试题 11:数值的整数次方
|
6月前
|
算法 Java
【力扣经典面试题】12. 整数转罗马数字
【力扣经典面试题】12. 整数转罗马数字
|
6月前
|
人工智能 算法 Java
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
数据结构与算法面试题:给定 n 个非负整数 a1,a2,a3,...,an,每个数代表坐标中的一个点(i, ai),请找出两个点之间的最大距离。(提示:动态规划)
89 1
|
6月前
Leecode之面试题消失的数字
Leecode之面试题消失的数字
|
6月前
|
存储 算法 Java
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
数据结构和算法面试题:给定一个整数数组 nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
88 0
|
6月前
|
机器学习/深度学习 存储 算法
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
数据结构与算法面试题:给定非负整数 m 和 n,计算不大于 m 的数字中,素数的个数。(提示:算法原理为埃氏筛、线性筛)
89 0
|
6月前
面试题 05.06:整数转换
面试题 05.06:整数转换
30 0
|
存储 Java
LeetCode150道面试经典题--罗马数字转整数(简单)
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。其按规律组合成一个罗马数字后将其转换成整数并输出。
70 0