这是一个面试问题.
给定数字n,找出0 ... n范围内有数字2的数字
例如 ,
输入= 13输出= 2(2和12)
我给出了通常的O(n ^ 2)解决方案,但有更好的方法.
是否有任何"技巧"公式可以帮助我立即得到答案
Dan*_*her 27
计算没有数字2的数字.在小于10 k的数字中,恰好有9 k.然后它仍然是将数字从10 k处理到n,其中
10^k <= n < 10^(k+1)
Run Code Online (Sandbox Code Playgroud)
你可以通过单独处理第一个数字(案例2和其他必须区分),然后前两个数字等来做.
例如,因为n = 2345,我们发现有9^3 = 729数字2没有1000以下的数字.在1000到1999的范围内再有729个这样的数字.然后在2000到2345的范围内,没有,总共1458,因此包含数字2的数字是
2345 - 1458 = 887
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10715 次 |
| 最近记录: |