gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:16:44 29 4
gpt4 key购买 nike

我正在尝试查看 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”自身重复,但该方法在应为 false 时仍计算为 true

最佳答案

这是一个简短而有趣的版本:)

 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。然后我们检查第 5 位在 numMask 中被提升:如果是,那么我们过去已经遇到过 5,所以我们可以立即判断该数字没有所有不同的数字并且返回假;否则,我们修改 numMask 并提高第 5 位。

如果我们走到最后,则不会遇到重复数字。

关于java - 检查整数是否有重复数字。没有字符串方法或数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26748026/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com