【leetcode】9. 回文数

29 阅读1分钟

leetcode-9.png

判断回文的话,可以利用reverse函数来进行反转,但是reverse是数组的操作函数,这里就要来进行下转换了

字符串解法

var isPalindrome = function (x) {
    let str = x.toString()
    return str === str.split("").reverse().join('')
};

数字解法

完整的反转

var isPalindrome = function (x) {
    if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
    let rev = 0;
    let origin = x
    while (x) {
        rev = rev * 10 + (x % 10);
        x = Math.floor(x / 10);
    }
    return rev === origin;
};

📝 说明:

  • 保存原始数字 origin
  • 使用取模和除法将数字反转
  • 最后与原始值比较

⚠️ 缺点:

  • 存在整数溢出的风险(在某些语言中需要判断)

反转一半

var isPalindrome = function (x) {
    if (x < 0 || (x % 10 === 0 && x !== 0)) return false;
    let rev = 0;
    // 推出循环的情况是 rev >= x
    // 此时偶数位就是 ===
    // 奇数位就是 rev > x
    while (x > rev) {
        rev = rev * 10 + (x % 10);
        x = Math.floor(x / 10);
    }
    // x == rev (偶数位)或 x == Math.floor(rev / 10)(奇数位)
    return rev === x || Math.floor(rev / 10) === x; 
};

✅ 优点:

  • 时间复杂度仍为 O(logN)
  • 空间复杂度 O(1)
  • 不需要保存原始值,也不会发生溢出