无限序列 12345678910111213

Infinite sequence 12345678910111213

给定一个无限的数字序列:

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

1234   gives 1   
13     gives 16  
111    gives 12  

有人已经想出了解决此类问题的算法吗?

提示:

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

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

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

215 很好,因为它继续 215 216...

也有可能字符串不是以整数开头,可以试试后缀以整数开头,并检查前面的数字。

2 1521 可以是 152 153...,但是前面有 15 1,

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

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

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

在您确定匹配项后仍需查找索引。您将必须累计个位数、两位数的计数...

还要检查没有遗漏的可能性。


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