gpt4 book ai didi

java - 在没有字符串比较的情况下以数学方式查找数字子字符串

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

这本来是我在工作中遇到的问题,但现在我只是出于好奇而试图解决这个问题。

我想找出 int 'a' 是否以最有效的方式包含 int 'b'。我写了一些代码,但似乎无论我写什么,将它解析成一个字符串然后使用 indexOf 比用数学方法快两倍。

内存不是问题(在合理范围内),只是纯粹的处理速度。

这是我用数学方法编写的代码:

private static int[] exponents = {10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };

private static boolean findMatch(int a, int b) {
if (b > a) return false;

if (a == b) return true;

int needleLength = getLength(b);

int exponent = exponents[needleLength];
int subNum;
while (a >= 1) {
subNum = a % exponent;

if (subNum == b)
return true;

a /= 10;
}
return false;
}

private static int getLength(int b) {

int len = 0;

while (b >= 1) {
len++;
b /= 10;
}

return len;
}

这是我正在使用的字符串方法,它似乎胜过上面的数学方法:

private static boolean findStringMatch(int a, int b) {      
return String.valueOf(a).indexOf(String.valueOf(b)) != -1;
}

因此,虽然这并不是我完成工作所必需的,但我只是想知道是否有人可以想出任何方法来进一步优化我的数学方法,或者一种全新的方法。同样,内存没有问题,我只是追求纯粹的速度。

我真的很想看到或听到任何人对此提供的任何信息。

编辑: 当我说包含时,我的意思是可以在任何地方,例如,findMatch(1234, 23) == true

编辑:对于所有说这些废话不可读且不必要的人:您没有捕获要点。关键是要解决一个有趣的问题,而不是想出要在生产代码中使用的答案。

最佳答案

应该更快的字符串方式,因为你的问题是文本的,而不是数学的。请注意,您的“包含”关系并未说明数字,它仅说明了它们的十进制 表示形式。

另请注意,您要编写的函数将不可读 - 其他开发人员永远不会理解您在做什么。 (看看你在这里遇到了什么麻烦。)另一方面,字符串版本非常清楚。

关于java - 在没有字符串比较的情况下以数学方式查找数字子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/231917/

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