概述
给定一个整数 n,计算所有小于等于 n 的非负整数中数字 1 出现的个数。
示例:
输入: 13
输出: 6
解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。
思路:找规律吧,通用解法应该是裸的数位DP,这里采用数学法吧。。。。
class Solution {
int ans=0;
public int countDigitOne(int n) {
if(n==0) return 0;
dfs_dp(n,1);
return ans;
}
private void dfs_dp(int id,int num)
{
int x;
x=id%10; id/=10;
if(x>=1)
ans+=num;
ans+=num*id;
int t=id;
while(t>0)
{
if(t%10==1)
ans+=(x+1)*num;
t/=10;
}
if(id!=0)
dfs_dp(id-1,num*10);
}
}
最后
以上就是纯情马里奥为你收集整理的JAVA程序设计:数字 1 的个数(LeetCode:233)的全部内容,希望文章能够帮你解决JAVA程序设计:数字 1 的个数(LeetCode:233)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复