我是靠谱客的博主 纯情马里奥,最近开发中收集的这篇文章主要介绍JAVA程序设计:数字 1 的个数(LeetCode:233),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

给定一个整数 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)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部