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

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

例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。

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


别人分享个题目给我,如上。

    private static void testOneNumber() {
        Integer s = 11;
        int result = 0;
        String tempString;
        char[] temp;
        String one = "1";
        char oneChar = '1';
        for (Integer i = 1; i < s + 1; i++) {
            tempString = i.toString();
            temp = tempString.toCharArray();
            if (tempString.contains(one)) {
                for (char aTemp : temp) {
                    if (oneChar == aTemp) {
                        result++;
                    }
                }
            }
        }
        System.out.println(result);
    }


然后,测试代码如上,运行结果如下

对于其他的数字,自己把代码整下来,自己测试一下就OK拉。


思路:
1.为什么要用Integer而不是int?
因为,这个是对象,而int是基本类型,差别就在对象是有很多方法可以使用的。
2.数据类型之间的转换
Integer可以直接toString成字符串,字符串又可以直接toCharArray,然后就变成了char数组,char数组之后,就可以挨个的比较字符啦。
char类型的比较可以只等用 == ,而不是字符串的需要equal方法。
3.关于算法
因为,我对算法这个还没研究,时间复杂度啥的,真的不是很清楚怎么在处理。所以这个处理方式,是个嵌套for循环。效率上可能不是好。
但是其他的好的方法,暂时还是没有想到哟。



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值