题目描述
输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。
例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。
示例1
**输入:**n = 12
**输出:**5
示例2
**输入:**n = 13
**输出:**6
做题思路
整个过程可以看作模拟密码锁,按住一位不动,观察其他位的情况。
1.cur==0时
2.cur==1时
3.cur==2,3,…,9时
代码
class Solution {
public int countDigitOne(int n) {
int digit = 1, res = 0;//digit用来记录low的变化
int high = n / 10, cur = n % 10, low = 0;//初始状态cur为个位数
while(high != 0 || cur != 0) {
if(cur == 0) res += high * digit;
else if(cur == 1) res += high * digit + low + 1;
else res += (high + 1) * digit;
low += cur * digit;//low增加一位
cur = high % 10;//当前数字变为高位数对10取余
high /= 10;//high减少一位
digit *= 10;//digit位数变化
}
return res;
}
}
总结
写到这里也结束了,在文章最后放上一个小小的福利,以下为小编自己在学习过程中整理出的一个关于 java开发 的学习思路及方向。从事互联网开发,最主要的是要学好技术,而学习技术是一条慢长而艰苦的道路,不能靠一时激情,也不是熬几天几夜就能学好的,必须养成平时努力学习的习惯,更加需要准确的学习方向达到有效的学习效果。
由于内容较多就只放上一个大概的大纲,需要更及详细的学习思维导图的 点击我的Gitee获取。
还有 高级java全套视频教程 java进阶架构师 视频+资料+代码+面试题!
全方面的java进阶实践技术资料,并且还有技术大牛一起讨论交流解决问题。