面试题43. 1~n整数中1出现的次数
程序员文章站
2022-06-07 10:29:26
...
题目:
面试题43. 1~n整数中1出现的次数
233. 数字 1 的个数
题解:
代码:
public class 面试题43 {
public static int countDigitOne(int n) {
int digit = 1; // 位因子(初始化为:个位)
int high = n / 10; // 高位
int cur = n % 10; // 当前位
int low = 0; // 低位
int res = 0; // 统计最终的结果
while(high !=0 || cur != 0) // 当 high 和 cur 同时为 0 时,说明已经越过最高位,因此跳出
{
// 当 cur = 0 时: 此位 1 的出现次数只由高位 high 决定,
// 计算公式为:high * digit
if(cur == 0)
{
res += high * digit;
}
// 当 cur = 1 时: 此位 1 的出现次数由高位 high 和低位 low 决定,
// 计算公式为:high * digit + low + 1
else if(cur == 1)
{
res += high * digit + low + 1;
}
// 当 cur = 2, 3, ⋯, 9 时: 此位 1 的出现次数只由高位 high 决定,
// 计算公式为:(high + 1) * digit
else if(cur >= 2 && cur <= 9)
{
res += (high + 1) * digit;
}
low += cur * digit; // 将 cur 加入 low ,组成下轮 low
cur = high % 10; // 下轮 cur 是本轮 high 的最低位
high /= 10; // 将本轮 high 最低位删除,得到下轮 high
digit *= 10; // 位因子每轮 × 10
}
return res;
}
public static void main(String[] args) {
int res = countDigitOne(32104);
System.out.println(res); // res == 23626
}
}
参考:
推荐阅读
-
剑指offer31:整数中1出现的次数(从1到n整数中1出现的次数)
-
剑指offer JZ31 整数中1出现的次数 Python 解
-
C语言:编写程序数一下 1到 100 的所有整数中出现多少次数字 9
-
ASP计算str2在str1中出现的次数
-
【剑指offer】面试题56(1):数组中只出现一次的两个数字
-
【剑指offer】_11整数中1出现的次数
-
【LeeCode 中等 数学 python3】剑指 Offer 43. 1~n整数中1出现的次数
-
第一行包含一个正整数n,表示老师给出的序列有n个数,接下来有n行,每行一个正整数k,为序列中每一个元素的值。(1 ≤ n ≤ 105,1 ≤ k ≤ n) 输出一行,为去重排序后的序列
-
【练习题】给定两个整数n和k,返回1 ... n中k个数的所有组合
-
剑指offer 从1到n整数中1出现的次数