这最初是我在工作中遇到的一个问题,但现在我只是为了自己的好奇心而尝试解决的问题。
我想找出 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
编辑:对于每个人都说这个废话是不可读和不必要的:你错过了重点。关键是要解决一个有趣的问题,而不是想出一个用于生产代码的答案。