Leetcode刷题笔记(自解与优化):9.回文数

    科技2022-08-06  97

    9.回文数

    判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

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

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

    解法一:把整数转为字符串,翻转之后与原字符串匹配

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

    解法二:使用数学方法逐位数字剥离后翻转,与原数字比较(leetcode跑分通过:时间(228ms),内存(45.6M))

    /** * @param {number} x * @return {boolean} */ var isPalindrome = function (x) { if (x < 0) { return false; } if (x === 0) { return true; } let initX = x; let result = 0; while (x !== 0) { result = result * 10 + x % 10; x = Math.floor(x / 10); } if(initX === result){ return true; } else { return false; } };

    解法三:双指针,首尾剥离匹配

    要点:通过Math.floor(Math.log10(x))获取x的幂级,通过x / n获取首位,通过x % 10获取末位,通过Math.floor((x%n)/10)剔除首尾

    /** * @param {number} x * @return {boolean} */ var isPalindrome = function (x) { if (x < 0) { return false; } if (x < 10) { return true; } let n = 10 ** Math.floor(Math.log10(x)); // 10 的 x位数次 幂 while (n > 1 && x > 0) { if (Math.floor(x / n) !== (x % 10)) { return false; } x = Math.floor((x % n) / 10); n /= 100; } return true; };

     

    Processed: 0.012, SQL: 8