[英]Troubles with looking for shared digits in two numbers
我需要检查两个数字是否有一些共享数字。 我的方法在测试时不返回任何内容。
我在这里想要做的是获取第一个数字的每个数字,然后遍历第二个数字以尝试查找与第一个数字相等的另一个数字。 如果是这样,我想返回true,否则,我要继续检查。
public static boolean hasSharedDigit(int num1, int num2) {
int digit1, digit2;
boolean isShared;
boolean isNum1TwoDigits = ((num1 >= 10) && (num1 <= 99)) ? true : false;
boolean isNum2TwoDigits = ((num2 >= 10) && (num2 <= 99)) ? true : false;
if ((!isNum1TwoDigits) || (!isNum2TwoDigits))
return false;
while (num1 > 10) {
digit1 = num1 % 10;
while (num2 > 10) {
digit2 = num2 % 10;
if (digit2 == digit1)
return true;
}
num1 /= 10;
}
return false;
}
可能不是最有效的方法,但是您可以创建一个Set
,该Set
包含由每个数字组成的数字,然后检查交集是否为空。
public static Set<Integer> getDigits(int num)
{
Set<Integer> result = new TreeSet<Integer>();
if (num == 0)
result.add(0);
else
{
num = Math.abs(num);
while (num > 0)
{
result.add(num % 10);
num /= 10;
}
}
return (result);
} // getDigits
public static boolean hasSharedDigit(int num1, int num2)
{
Set<Integer> digits1 = getDigits(num1);
Set<Integer> digits2 = getDigits(num2);
digits1.retainAll(digits2);
return (!digits1.isEmpty());
}
这是将数字转换为字符数组并在两个for循环中进行比较的基本解决方案
public static boolean hasSharedDigit(int num1, int num2) {
if (num1 == num2) {
return true;
}
char[] arr1 = String.valueOf(num1).toCharArray();
char[] arr2 = String.valueOf(num2).toCharArray();
for (char ch1 : arr1) {
for (char ch2 : arr2) {
if (ch1 == ch2) {
return true;
}
}
}
return false;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.