gpt4 book ai didi

java - java中没有重复数字的反向整数

转载 作者:搜寻专家 更新时间:2023-10-31 19:32:09 25 4
gpt4 key购买 nike

我的目标是在 Java 中反转没有重复数字的整数如何提高代码的复杂性,或者是否存在良好/标准的算法?

如果有重复的数字,它应该保留最后一个数字

public static void main(String[] args) {
int n = -19890;
System.out.println(reverseNumberWithoutDuplicate(n));
}

public static int reverseNumberWithoutDuplicate(int number) {
boolean isNegative = (number < 0);
number = isNegative ? number * -1 : number;

Set<Character> lookup = new HashSet<>();

StringBuffer sb = new StringBuffer();
char[] digits = String.valueOf(number).toCharArray();
for (int i = digits.length - 1; i >= 0; --i) {
if (lookup.contains(digits[i])) {
continue;
}
sb.append(digits[i]);
lookup.add(digits[i]);
}
return isNegative ? Integer.parseInt(sb.toString()) * -1 : Integer.parseInt(sb.toString());
}

预期输出:-981

最佳答案

让我们逐步构建解决方案。以下函数反转正数的数字。

int reverseNumber(int number) {
int answer = 0;
for (int n = number; n != 0; n /= 10) {
// Digits are taken from least significant to most significant
int digit = n % 10;
// And added the other way round
answer = answer * 10 + digit;
}
return answer;
}

此代码可以很容易地调整为使用负数来:

int reverseNumber(int number) {
if (number < 0) {
return -reverseNumber(-number);
}
// The rest is the same

我们的下一个目标——跳过重复的数字。我们将在 boolean[] seen 中跟踪已经看到的数字列表。

private static int reverseNumberWithoutDuplicate(int number) {
if (number < 0) {
return -reverseNumberWithoutDuplicate(-number);
}

boolean[] seen = new boolean[10];
int answer = 0;
for (int n = number; n != 0; n /= 10) {
int digit = n % 10;
if (!seen[digit]) {
seen[digit] = true;
answer = answer * 10 + digit;
}
}
return answer;
}

关于java - java中没有重复数字的反向整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40472834/

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