前端必刷算法题: “回文数”

726 阅读2分钟

这是我参与11月更文挑战的第17天,活动详情查看:2021最后一次更文挑战

题目

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

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

 

示例 1:

输入:x = 121

输出:true

示例 2:

输入:x = -121

输出:false

解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例 3:

输入:x = 10

输出:false

解释:从右向左读, 为 01 。因此它不是一个回文数。

示例 4:

输入:x = -101

输出:false  

提示:

-231 <= x <= 231 - 1

解法1:结合数组

解题思路 既然是回文整数,那么先判断是不是一个数字,如果不是,直接返回 false;

将字符串转为一个数组,再将数组进行反转,并且深拷贝给另外一个变量,再将原来字符串转成的数组进行反转,变成原来的顺序。

如果是回文整数,在循环时,反转前后每一位的元素应该是一样的,所以不必全部遍历,只需要遍历一半即可。

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    let number = parseInt(x);
    if(isNaN(number)) {
        return false;
    }
    number = number.toString().split('');
    let numberLen = number.length
        numberJiOu = numberLen % 2 === 1 ? parseInt(numberLen / 2) : numberLen / 2,
        numberRever = Array.from(number.reverse()),
        numFlag = true;

        number = number.reverse();
    for(let i = 0; i < numberJiOu; i++) {
        
        if(number[i] === numberRever[i]) {
            numFlag = true;
        } else {
            return false;
        }
    }
    return numFlag;
};

解法2:转换字符串

题目中又问道除了最基本的解法之外有没有其他的解法,比如利用字符串的知识。

步骤

1.转为字符串

2.转为数组

3.reserve

4.转为字符串

5.转为数字

6.判断是否相等

ps:如果是负数,那么 reserve 之后也是不等的,所以对结果不影响

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