LeetCode第8题:回文数

114 阅读2分钟

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

题目描述

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

回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

例如,121 是回文,而 123 不是。  

示例 1:

输入:x = 121
输出:true

示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

思路

判断是一个数是不是回文数,首先先看清楚题目,经过整理发现,负数一定不是回文数,这种情况可以直接返回false,然后如果这个数是正数,将这个数倒过来的数值计算出来,然后进行数值比较,相等的话 就是回文数,这样就可以直接返回,不然就不是回文数,返回false,例如:545,先计算他的倒数也是545,相等,545就是回文数, 例如:322,倒数是223,不相等,就不是回文数,例如:22,倒数也是22,相等,22也是回文数,9也是回文数,倒数与他相等

代码

public static boolean isPalindrome(int x) {
  try {
    //判断是不是负数,是的话不用进行后续操作,直接就是false
    if (x < 0) {
      return false;
    }
    //临时变量,保存倒数
    int cur = 0;
    //临时变量,存储x
    int num = x;
    //开始循环
    while (num != 0) {
      //将数值反转
      cur = cur * 10 + num % 10;
      //降位
      num /= 10;
    }
    return cur == x;
  } catch (Exception e) {
    e.printStackTrace();
  }
  return false;
}
public static void main(String[] args) {

  System.out.println(isPalindrome(545));
  System.out.println(isPalindrome(322));
  System.out.println(isPalindrome(22));

}

运行结果
true
false
true

总结

这个题目跟整数反转其实挺像的,做过整数反转之后,对这个问题基本上就是秒,只要能够把当前数的倒数计算出来,这个题目就做完了。然后数值溢出就用了try catch来处理,溢出必然不是倒数u,直接返回false就行。