改变回文以适应数字回文

时间:2015-10-15 03:48:33

标签: java palindrome

所以我找到了一种非常有效的方法来检查回文,但我被要求改变它以适应数字回文并再次卡住。

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但我似乎无法找到数字等价物,或者知道是否有一个。

2 个答案:

答案 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