【问题标题】:Infinite sequence 12345678910111213无限序列 12345678910111213
【发布时间】:2015-12-29 02:36:45
【问题描述】:

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

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

1234   gives 1   
13     gives 16  
111    gives 12  

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

【问题讨论】:

  • 显示你尝试了什么,这里不是要求你做功课的地方
  • 投票结束时过于宽泛。
  • 阅读“trie”数据结构
  • 显而易见的方法就是一路走过去,边走边生成数字,找到时停下来。你可以走一些捷径,我会把它们作为练习留给读者。
  • @Harold:蛮力解决方案将是字符串长度的指数......

标签: algorithm numbers sequence infinite


【解决方案1】:

提示

如果您知道输入字符串以整数开头,则可以通过尝试所有前缀来快速检查该假设。例如,取 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 是字符串的长度,无论其位置如何。

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 2014-07-19
    • 2015-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多