题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。
例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。
例如输入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循环。效率上可能不是好。
但是其他的好的方法,暂时还是没有想到哟。