所以我找到了一种非常有效的方法来检查回文,但我被要求改变它以适应数字回文并再次卡住。
public boolean checkNumericPalindrome() {
String s = this.s.toLowerCase();
String resultString = "";
for(int i=0; i<s.length(); i++) {
if(Character.isDigit(s.charAt(i))) {
resultString = resultString + s.charAt(i);
}
}
int low = 0;
int high = resultString.length() - 1;
boolean isPalindrome = true;
while (low < high) {
if (resultString.charAt(low) != resultString.charAt(high)) {
isPalindrome = false;
break;
}
low++;
high--;
}
return isPalindrome;
}
`
我已经发现我必须将Letters
更改为isDigits
,而且我知道我应该更改或删除toLowerCase
并且可能s.length
但我似乎无法找到数字等价物,或者知道是否有一个。
答案 0 :(得分:1)
如果您不想对逻辑进行任何重大更改,您只需从输入数字中创建字符串并执行相同的操作。
public boolean checkNumericPalindrome(int number) {
String resultString = Integer.toString(number);
//proceed with same logic & process string
return true;
}
修改强>
更好的方法是:
public boolean checkNumericPalindrome(int number) {
return checkStringPalindrome(Integer.toString(number));
}
因此,每当您对checkStringPalindrome
进行更改时,您都不需要更改其他方法。
答案 1 :(得分:0)
要检查整数(也就是数字)值是否为回文,请反转数字并与原始数字进行比较:
private static long reverseDigits(long value) {
long reverse = 0;
for (; value != 0; value /= 10)
reverse = reverse * 10 + value % 10;
return reverse;
}
private static boolean isPalindrome(long value) {
return (value == reverseDigits(value));
}
测试
private static void test(long value) {
System.out.printf("%d <-> %d ==> %s%n", value, reverseDigits(value), isPalindrome(value));
}
public static void main(String[] args) {
test(0);
test(1);
test(2);
test(11);
test(12);
test(21);
test(22);
test(1234554321);
test(1234565432);
test(123456789987654321L);
}
输出
0 <-> 0 ==> true
1 <-> 1 ==> true
2 <-> 2 ==> true
11 <-> 11 ==> true
12 <-> 21 ==> false
21 <-> 12 ==> false
22 <-> 22 ==> true
1234554321 <-> 1234554321 ==> true
1234565432 <-> 2345654321 ==> false
123456789987654321 <-> 123456789987654321 ==> true