[英]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.