Offer 驾到,掘友接招!我正在参与 2022 春招打卡活动,点击查看活动详情。
一、题目描述:
- 回文数-难度简单
给你一个整数 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;
}
}
};
四、总结:
这道题比较简单,出错原因是考虑不仔细。
我一直以为自己是个比较仔细细心的人,这几天做题发现根本不是这样啊喂!
加油吧!