设为首页 加入收藏

TOP

一道算法面试题的解题思路
2014-11-24 01:40:40 来源: 作者: 【 】 浏览:14
Tags:一道 算法 试题 解题 思路

看到一道别人的面试题:统计出从0-n之间1的个数,如n=13,f(0..13)=>6,0到13有6个数带有1,要求不能用字符串方式计算,只能用数学方式。
看回贴都没个答案,于是自己也来做做,做好了想回贴发现要回答N多问题。。几十题,就懒的点了,在自己空间说下了,哈哈


解法如下:


首先我用字符串加起来的方式计算得出一个规律。。


0 – n 1的个数


9 1
99 20
999 300


于是咯,思路出来了:


0 – 9, 1 #只有1了


0 – 99, 1 + 10 + 1 + (10 – 2) #1加上10 – 19的十位1 再加11上多一个1,然后20 – 99都会有21, 31。。。的


0 – 999, 到这里了嘛,规律不就出来了么, 999就有10个0-99了,那就是20 * 10,再加上100 – 199,那就是300了


0 – 9999, 自然就是300 * 10 + 1000了, 4000


0 – 1234, 300(999中的) + 1 + 234 (1000 – 1234 每次千位都有一个) +
2 * 20(234中两个99) + 100 (100 – 199的) + 3(10 – 30个位上)
+ 10(10 – 19) + 1(个位0 – 4) = 689
从高位一直下来就OK了,还要判断下比如 + 1 + 234这里,这里的每一个数字都会有千位上的1,又如234,100 – 199中百位都会有一就要加上,这里只是分了两种情况,大于1和等于1


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇奕恒佳源面试全过程–Java 下一篇北京创维信软件公司面试题

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: