9. 回文数

Posted by CodingWithAlice on July 4, 2021

9. 回文数

题目:

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

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

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

解答:

  • 方法一:转换成字符串处理

    image-20210704104629450

    时间复杂度:O(n),空间复杂度:xx

var isPalindrome = function (x) {
    x = x.toString(); // 转换成字符串
    let length = x.length;
    let mid = Math.floor(length / 2);
    for(let i = 0; i < mid; i++) { // 按序循环半个字符串进行比对
        if(x[i] !== x[length - 1 -i]) {
            return false
        }
    }
    return true
};
  • 方法二:通过余数处理

    image-20210704123843212

时间复杂度:O(n),空间复杂度:xx

核心思想:不改变数字类型,通过余数的方法进行取数

【注意⚠️】:每次取完数就把 x 的头尾数字减掉不可行 —> 例如10000021 ,减掉头尾,数字直接变成 2

分析过程:IMG_03ED87E919A7-1

let isPalindrome = (x) => {
    if(x < 0) {
        return false
    }
    // 通过余数处理
    let length = x.toString().length;
    for(let i = 0; i < Math.floor(length / 2); i++) {
        let left = parseInt(x / Math.pow(10, length - 1 - i)) % 10;
        let right = parseInt(x % Math.pow(10, i + 1) / Math.pow(10, i));
        if(left !== right) {
            return false
        }
    }
    return true
}