输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数

这是一道经典的Google面试题,博客介绍了两种Java实现方法来计算从1到n整数中数字1出现的次数。第一种方法通过将整数序列转换为字符串并遍历字符来计数,第二种方法则通过数学计算直接得出答案。在给出的示例中,对于整数序列{1,2,3,4,5,6,7,8,9,10,11,12}和整数12,两种方法都得出数字1出现了5次。" 106367093,9069284,Kubernetes Metrics-Server:深度解析与部署指南,"['kubernetes', 'metrics-server', '资源监控']
例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。

分析:这是一道广为流传的google面试题。

java实现:

//    求n个数中一共含有多少个1
public class Order_Shed {

    //思路一
    public static int countNum(int[]array,char target){
        int count=0;
        if(array==null||array.length==0)
            return count;
        String source="";
        for(int i=0;i<array.length;i++){
            source+=array[i];
        }
        int length = source.length();
        for(int i=0;i<length;i++){
            if(source.charAt(i)==target)
                count++;
        }
        
        return count;
    }
    
    //思路二
    public static int countNumOfOne(int n){
        int count = 0;
        int dividend_1 = 1;
        int dividend_2 = 10;
        int temp =0;
        while(dividend_1<=n){
            temp=(n%dividend_2)/dividend_1;
            if(temp>1)
                count+=(n/dividend_2+1)*dividend_1;
            else if(temp==1)
                count+=(n/dividend_2)*dividend_1+n%dividend_1+1;
            else
                count+=(n/dividend_2)*dividend_1;
            dividend_1*=10;
            dividend_2=dividend_1*10;
        }
        return count;
    }
    
    
    
    public static void main(String[] args) {
        int[] array={1,2,3,4,5,6,7,8,9,10,11,12};
        System.out.println(countNum(array, '1'));
        System.out.println(countNumOfOne(12));
    }
    
    
}


结果:

5
5




评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值