回文数(第2题)

117 阅读1分钟

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

菜鸟就要从第二题继续

一、题目描述:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。 示例 1:

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

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

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

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

直观直接使用字符串for循环对比,使用x.toString()或者String(x)都行

进一步直接用已有方法一行代码也可以实现对应功能

如果不用字符串,则要进行取余操作,参考官方视频,首先进行负数等特殊情况判断,其次要注意溢出问题,所以只转换一半即可

三、AC 代码:

第一版

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
   let y=String(x)
   let n=y.length
   for(let i=0;i<n/2;i++){
       if(y[i]!=y[n-1-i]){     
        return false
       }
   }
   return true
};

第二版

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
return x.toString() == x.toString().split('').reverse().join('')
};

第三版

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if(x < 0 || (x % 10 == 0 && x!= 0)) return false
    let temp = 0, s = x
    while(s>temp){
        temp = temp * 10 + s % 10
        s = Math.floor(s/10)
    }
    return s === temp || s === Math.floor(temp / 10);
};

绳锯木断