これはもともと私が仕事で遭遇した問題でしたが、今は自分の好奇心のために解決しようとしているだけです。
可能な限り最も効率的な方法で、int 'a' に int 'b' が含まれているかどうかを調べたいと思います。私はいくつかのコードを書きましたが、何を書いても、それを文字列に解析してから indexOf を使用すると、数学的に行うよりも 2 倍高速です。
メモリは (当然のことながら) 問題ではなく、単に処理速度が速いだけです。
これは私が数学的にそれを行うために書いたコードです:
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
編集:このがらくたは読めず、不必要だと言っているすべての人のために:あなたは要点を逃しています。重要なのは、興味深い問題を掘り下げることであり、製品コードで使用するための答えを思いつくことではありません。