从一组15,000个12位数字中查找相差1位数的数字

时间:2017-09-26 22:16:51

标签: algorithm

我有一张约15,000张12位数的条形码门票。大多数情况下,它们是通过纸张或电话屏幕扫描的,但有时它们会被输入(屏幕破裂等)。如果我们有任何一组代码相差1位数,我将如何找到第一个错误输入的数字可能最终会得到另一个有效的代码吗?

代码编号是12位整数,在100000000000到999999999999范围内相当随机(我们不希望前导零给其他系统带来问题)

e.g。给出三个代码号 123456789012
123456789013
223456789012

第一个和第二个仅相差一位数,第二个和第三个相同。第一个和第三个相差2位数,因此被忽略。

1 个答案:

答案 0 :(得分:1)

使用哈希集。依次浏览15,000个数字中的每一个,在一个地方生成108个不同的数字(12个数字乘以每个地方9个可能的交替数字)。检查哈希集中是否存在这108个数字中的每一个(不插入它们)。如果其中任何一个确实存在,那么你就会受到打击。如果没有,则将未修改的数字添加到哈希集中,然后移到下一个哈希集。

您也可以尝试使用相邻数字的换位,这样可以在108位上方再添加11位数字来尝试。