无限序列12345678910111213

时间:2015-10-01 06:31:17

标签: algorithm numbers sequence infinite

给出无限的数字序列:

12345678910111213141516 .....等等。我必须找到输入字符串的第一个位置。像这样:

1234   gives 1   
13     gives 16  
111    gives 12  

任何人都已经找到了这样一个问题的算法?

1 个答案:

答案 0 :(得分:1)

<强>提示

如果您知道输入字符串以整数开头,则可以通过尝试所有前缀来快速检查该假设。例如, 21521

2 不能正确,因为它继续为2 3 4 ......

21 不能正确,因为它继续为21 22 23 ......

215 很好,因为它继续 215 21 6 ...

字符串也可能不是从一个整数开始的,所以你可以尝试将后缀作为一个整数开头,并检查前面的数字。

2 1521 可以 152 1 53 ...,但这之前是15 1

21 512 可以 512 513 ...,但前面有5 11

215 12 可以 1 2 3 ...,但这之前是......没有,

2151 2 可以 2 3 ...,但这之前没有足够的数字。

确定匹配后仍然找到索引。您将不得不累积单位数字的计数,两位数字......

还需要检查是否错过了可能性。

乍一看,此过程需要时间O(N³),其中N是字符串的长度,无论其位置如何。