标签:10 digit Java cur Offer res 43 high low
文章目录
打卡第九天啦~
题目描述
- 有点像数字序列中的某一位
思路 && 代码
- 主体思路:从低到高,计算出每一位出现的1的个数。
- 三种情况:n的当前位为0、为1、为其他值。
- 这里和数位dp的思想相关(但是博主没怎么看= =,有兴趣可以去了解了解)
- 仔细想想确实是dp的理,初始化、状态转移方程与最优子结构都很明显。
class Solution {
// 思路:逐位计算,计算每一位的1的次数
public int countDigitOne(int n) {
// 位数、结果
int digit = 1, res = 0;
// 高位、当前位、低位(高、低位都不一定只有一位)
int high = n / 10, cur = n % 10, low = 0;
while(high != 0 || cur != 0) {
// Case 1: 当前位为0,只需根据高位判断
if(cur == 0) {
res += high * digit;
}
// Case 2: 当前位为1,多加一个对应的低位个数(low + 1)
else if(cur == 1) {
res += high * digit + low + 1;
}
// Case 3: 当前位为2 ~ 9,直接根据高位判断即可,相对 cur = 0,多让high + 1
else {
res += (high + 1) * digit;
}
// 维护 low cur high digit
low += cur * digit;
cur = high % 10;
high /= 10;
digit *= 10;
}
return res;
}
}
标签:10,digit,Java,cur,Offer,res,43,high,low 来源: https://blog.csdn.net/qq_45108415/article/details/119001299
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。