小编典典

检查整数是否有重复的数字。没有字符串方法或数组

java

我正在尝试查看int是否具有相同数字的倍数。尝试不使用字符串方法或数组。我遇到的主要方法是hasDistinctDigits()。当重复数字位于末尾时有效,但当它们位于开始或中间时无效。

public static void main(String[] args) {
    System.out.println(hasDistinctDigits(12234));
}

public static boolean hasDistinctDigits(int number) {
    boolean returner = true;
    int count = 1;
    int newNum = number;
    int digit = 0;

    while (count < numDigits(number)) {         
        while (count < numDigits(newNum)) {
            digit = newNum % 10;
            newNum/=10;
            if (digit == getDigit(newNum, count)) {
                returner = false;
            }
            count++;                
        }
        count++;
    }
    return returner;
}

public static int numDigits(int number) {
    int count = 0;
    while (number != 0) {
        number /= 10;
        count++;
    }
    return count;
}

public static int getDigit(int number, int i) {
    int digit = 0;
    int count = 0;
    int originalNum = number;

    while (count <= i) {
        if (count == i) {
            digit = number % 10;
        }
        number /= 10;
        count++;
    }
    if (i > numDigits(originalNum)) {
        return -1;
    } else {
        return digit;
    }
}

}

如果运行此命令,您将看到‘2’重复出现,但该方法仍会评估true其应为的时间false


阅读 270

收藏
2020-11-26

共1个答案

小编典典

这是一个简短而甜蜜的版本:)

 private static boolean hasDistinctDigits(int number) {
     int numMask = 0;
     int numDigits = (int) Math.ceil(Math.log10(number+1));
     for (int digitIdx = 0; digitIdx < numDigits; digitIdx++) {
         int curDigit = (int)(number / Math.pow(10,digitIdx)) % 10;
         int digitMask = (int)Math.pow(2, curDigit);             
         if ((numMask & digitMask) > 0) return false;
         numMask = numMask | digitMask;
     }
     return true;
 }

它的工作方式非常简单。numMask是一个整数,用于存储已经遇到的数字(由于十进制系统编号只有10位,而整数给出16位,因此我们有足够的位数来存储出现的每个十进制数字)。

我们遍历数字中的所有数字。对于每个数字索引,我们在中获得实际数字curDigit。假设当前数字为5。然后,我们检查它是否将numMask的第5位提高了:如果是,那么我们已经5在过去遇到过a
,因此我们可以立即知道该数字没有所有不同的数字并返回false;否则,返回false。否则,我们修改numMask并提高第5位。

如果到最后,则不会遇到重复的数字。

2020-11-26