《Nature Numbers》题目分析
一个直观的解法是从1, 2, 3, ... 开始一个数一个数枚举。一开始count=0,保存位数之和。
假设当前枚举到K,我们就把count加上K的位数。如果这时count大于等于N,我们就知道第N位应为K的倒数第N-K+1位。
考虑到N=10^18时,K至少大于10^16,这个算法肯定会超时。
一种优化的思路是不要一个数一个数枚举,而是一批数一批数枚举:每次枚举所有的一位数、两位数、三位数……
一位数有10个(包括0),两位数有90个,三位数有900个……
假设当前枚举到K位数,我们就把count加上(K * K位数的个数)。如果这时count大于等于N,我们就知道第N位是一个K位数的某一位。
当然具体是第几个K位数的第几位,也可以计算出来。请大家自己算一算~
能具体解释一下吗?