【力扣刷题记 9】——《回文数》

158 阅读2分钟

Offer 驾到,掘友接招!我正在参与 2022 春招打卡活动,点击查看活动详情

一、题目描述:

  1. 回文数-难度简单

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

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

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

示例 1:

输入:x = 121 输出:true 示例  2:

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

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

提示:

-2^31 <= x <= 2^31 - 1

进阶:你能不将整数转为字符串来解决这个问题吗?

二、题目和思路分析:

这道题还是比较简单的,判断数字的回文,将数字转为字符串,循环判断字符串的首尾是否相等即可,可以用函数也可以用 while 循环。 我的思路大概是这样的:

转字符串的做法比较简单 声明一个用来对比的变量 s 判断 s 的第一位和最后一位是否相等 相等=》 s = s.slice(1,s.length-1) 如果 s 当前只有一位字符串或为空,则结束,是回文数,否则不是回文数

霹雳啪嗒键盘一顿输入,提交发现错误了,原来是重复调用函数的时候,我只是进行了调用,但是并没有返回该函数。所以重复调用没有返回值,导致返回值为 undefined。 所以在 else 加了 return 之后,完美解决,成功!

那么,如何在不转为字符串的情况下解决这个问题呢? 转数组?好像和转字符串没什么区别 如果不进行转换,如何获取到当前整数的回文数呢? 我想了三天三夜,没想到。暂时放在这把!

三、代码:

代码实现如下:

var isPalindrome = function (x) {
  x = x.toString();
  return isP(x);
  function isP(s) {
    if (s[0] === s[s.length - 1]) {
      s = s.slice(1, s.length - 1);
      if (s.length < 2) {
        return true;
      } else {
        return isP(s);
      }
    } else {
      return false;
    }
  }
};

四、总结:

这道题比较简单,出错原因是考虑不仔细。

我一直以为自己是个比较仔细细心的人,这几天做题发现根本不是这样啊喂!

加油吧!

image.png