Java面试算法题:如何判断一个数字是否为回文数?

2026-06-11 14:236阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计702个文字,预计阅读时间需要3分钟。

Java面试算法题:如何判断一个数字是否为回文数?

在回答这个问题之前,首先得明确什么是回文数字。回文数字:任何自然数,若将它的各位数字反向排列后,得到的数字与原数字相等,则称这个数为回文数。例如,12321就是一个回文数。

在回答这个问题之前,首先得清楚什么是回文数字,回文数字有什么特征。

回文数字:设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。通俗地说,回文数字类似于我们在数学上学习的轴对称图形,比如111、12321是回文数,而1234不是回文数,小数没有回文数。

了解了回文数字的定义之后,对于特殊情形的数字可以直接得出结论,比如:

  • 负数不是回文数,因为负数前有负号 - ;
  • 小数没有回文数;
  • 除0外,个位数为0的数字不是回文数;
  • 0-9都是回文数字;

如何通过代码实现呢?常见的思路有两种:

  • 把数字反转,比较反转后的数字与原数字是否相等(需要注意反转后的数字范围溢出问题);

    Java面试算法题:如何判断一个数字是否为回文数?

  • 把数字转换为字符串,通过比较字符来判断是否为回文数;

示例1— 数字反转:

private static boolean isPalindrome(int number) { if (number < 0) { return false; } int tmpNumber = number; long reversedNumber = 0; while (tmpNumber != 0) { reversedNumber = reversedNumber * 10 + (tmpNumber % 10); tmpNumber = tmpNumber / 10; } return reversedNumber == number; }

其中反转数字reversedNumber采用long型,避免数字反转后范围溢出,比如int最大值为2147483647,正常反转后的值是7463847412,但是已经超出了int的范围。

示例2 — 数字转换为字符串:

private static boolean isPalindrome(int number) { String numStr = String.valueOf(number); int low = 0; int high = numStr.length() - 1; while (low < high) { if (numStr.charAt(low) != numStr.charAt(high)) { return false; } low++; high--; } return true; }

上面的代码采用while循环实现的,也可以使用for循环来实现,如下:

private static boolean isPalindrome(int number) { String numStr = String.valueOf(number); int length = numStr.length(); for (int low = 0, high = length - 1; low < high; low++, high--) { if (numStr.charAt(low) != numStr.charAt(high)) { return false; } } return true; }

举一反三:如果给定一个字符串,又该如何判定是否为回文字符串呢?上面的代码示例已经给出了相应的解决思路。

测试验证:

public static void main(String[] args) { System.out.println(isPalindrome(0)); System.out.println(isPalindrome(1)); System.out.println(isPalindrome(101)); System.out.println(isPalindrome(12321)); System.out.println(isPalindrome(1147483647)); }

输出的结果如下:

truetruetruetruefalse

更多有关Java面试相关的知识点可以关注小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。::: hljs-center

:::

本文共计702个文字,预计阅读时间需要3分钟。

Java面试算法题:如何判断一个数字是否为回文数?

在回答这个问题之前,首先得明确什么是回文数字。回文数字:任何自然数,若将它的各位数字反向排列后,得到的数字与原数字相等,则称这个数为回文数。例如,12321就是一个回文数。

在回答这个问题之前,首先得清楚什么是回文数字,回文数字有什么特征。

回文数字:设n是一任意自然数,若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。通俗地说,回文数字类似于我们在数学上学习的轴对称图形,比如111、12321是回文数,而1234不是回文数,小数没有回文数。

了解了回文数字的定义之后,对于特殊情形的数字可以直接得出结论,比如:

  • 负数不是回文数,因为负数前有负号 - ;
  • 小数没有回文数;
  • 除0外,个位数为0的数字不是回文数;
  • 0-9都是回文数字;

如何通过代码实现呢?常见的思路有两种:

  • 把数字反转,比较反转后的数字与原数字是否相等(需要注意反转后的数字范围溢出问题);

    Java面试算法题:如何判断一个数字是否为回文数?

  • 把数字转换为字符串,通过比较字符来判断是否为回文数;

示例1— 数字反转:

private static boolean isPalindrome(int number) { if (number < 0) { return false; } int tmpNumber = number; long reversedNumber = 0; while (tmpNumber != 0) { reversedNumber = reversedNumber * 10 + (tmpNumber % 10); tmpNumber = tmpNumber / 10; } return reversedNumber == number; }

其中反转数字reversedNumber采用long型,避免数字反转后范围溢出,比如int最大值为2147483647,正常反转后的值是7463847412,但是已经超出了int的范围。

示例2 — 数字转换为字符串:

private static boolean isPalindrome(int number) { String numStr = String.valueOf(number); int low = 0; int high = numStr.length() - 1; while (low < high) { if (numStr.charAt(low) != numStr.charAt(high)) { return false; } low++; high--; } return true; }

上面的代码采用while循环实现的,也可以使用for循环来实现,如下:

private static boolean isPalindrome(int number) { String numStr = String.valueOf(number); int length = numStr.length(); for (int low = 0, high = length - 1; low < high; low++, high--) { if (numStr.charAt(low) != numStr.charAt(high)) { return false; } } return true; }

举一反三:如果给定一个字符串,又该如何判定是否为回文字符串呢?上面的代码示例已经给出了相应的解决思路。

测试验证:

public static void main(String[] args) { System.out.println(isPalindrome(0)); System.out.println(isPalindrome(1)); System.out.println(isPalindrome(101)); System.out.println(isPalindrome(12321)); System.out.println(isPalindrome(1147483647)); }

输出的结果如下:

truetruetruetruefalse

更多有关Java面试相关的知识点可以关注小程序,涉及Java基础、多线程、JVM、Spring、Spring Boot、Spring Cloud、Mybatis、Redis、数据库、数据结构与算法等。::: hljs-center

:::