回文数是怎么回事呢

315 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

一、题目描述

9. 回文数

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。

  • 这种比较投机取巧,下面我们来通过算法分析实现回文数判定!

  • 首先,我们可以针对特殊情况进行判定这样可以快速判定,提高程序效率。比如说对于个位数都满足回文数的要求。

  • 其次对于负数来说就不是回文数,因为一个负数只会出现在数字前部不会出现在其他地方。

  • 所有个位数是0的都不是回文数,因为各位为0 的情况如果是回文数那么第一位必然是0,我们知道自然数中不会是0开头的。

  • 以下取自leetcode官网分析图片。从图片中我们也能够看得出我们需要针对奇偶性进行区别对待!

  • 我们没必要一直反转到结束,反转的数字从0开始,一开始比源数字小,知道反转数字大于等于源数字表示我们无需反转了。

二、思路分析

  • 回文数就是数字是对称性质的。常规解法就是直接将数字进行反转然后和原数字进行比对。将数字进行反转在Java中实现也很简单。
  • 实现反转就是先将数字转成字符串。利用Java自带的反转得到结果。
 public boolean isPalindrome(int x) {
     String str = String.valueOf(x);
     return new StringBuilder(str).reverse().toString().equals(str);
 }
 public boolean isPalindrome2(int x) {
     if (x < 0 || (x % 10 == 0 && x != 0)) {
         return false;
    }
     int result = 0;
     while (result < x) {
         result = result * 10 + x % 10;
         x /= 10;
    }
     return x == result || x == result / 10;
 }

四、总结

  • 回文数是leetcode简单之一,也是面试常考点。主要考察我们对算法的时间空间复杂度的了解。