gpt4 book ai didi

algorithm - 尝试所有 3 位数字锁的最短字符串

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:42:04 25 4
gpt4 key购买 nike

我在最近的一次采访中被问到这个问题。三位数锁的 key 值可以在“000”-“999”之间。所以基本上要尝试1000种组合才能打开锁。所以我必须生成最短的字符串,以便检查所有可能的组合(即“000”-“999”之间)。因此,例如,如果我们有字符串“01234”,那么它将检查组合“012”、“123”和“234”。所以我必须生成一个字符串来检查所有组合。我尝试使用哈希集来实现这一点,我从“000”开始,然后取字符串中的最后两个字符,即“00”,然后附加一个从 0 到 9 的新数字,并检查它是否存在于哈希集中。如果不是,我将该数字附加到输出字符串并重复该过程。有没有其他有效和干净的方法来解决这个问题。

最佳答案

您描述的过程是基于这样的假设,即最短的字符串每个代码都恰好出现一次。事实证明,这个假设是正确的。这是一个简单的回溯实现 (C++):

#include <stdio.h>

bool used[1000];
int digits[33333];

bool backtrack(int index, int total)
{
if (total == 1000)
{
printf("%d\n", index);
for (int i = 0; i < index; ++i) {
printf("%d", digits[i]);
}
printf("\n");
return true;
}

for (int d = 0; d < 10; ++d)
{
int prev = 100*digits[index-2]+10*digits[index-1]+d;
if (!used[prev]) {
digits[index] = d;
used[prev] = true;
if (backtrack(index+1, total+1))
return true;
used[prev] = false;
}
}
}

int main(void) {
digits[0] = 0;
backtrack(2, 0);
return 0;
}

输出:

1002
00010020030040050060070080090110120130140150160170\
18019021022023024025026027028029031032033034035036\
03703803904104204304404504604704804905105205305405\
50560570580590610620630640650660670680690710720730\
74075076077078079081082083084085086087088089091092\
09309409509609709809911121131141151161171181191221\
23124125126127128129132133134135136137138139142143\
14414514614714814915215315415515615715815916216316\
41651661671681691721731741751761771781791821831841\
85186187188189192193194195196197198199222322422522\
62272282292332342352362372382392432442452462472482\
49253254255256257258259263264265266267268269273274\
27527627727827928328428528628728828929329429529629\
72982993334335336337338339344345346347348349354355\
35635735835936436536636736836937437537637737837938\
43853863873883893943953963973983994445446447448449\
45545645745845946546646746846947547647747847948548\
64874884894954964974984995556557558559566567568569\
57657757857958658758858959659759859966676686696776\
78679687688689697698699777877978878979879988898999\
00

程序高效。

关于algorithm - 尝试所有 3 位数字锁的最短字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33111675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com