LeetCode系列之——7. Reverse Integer/9. Palindrome Number(JavaScript)

Q:

题目链接:Reverse Integer和Palindrome Number
先看题目要求:
  Reverse Integer:
LeetCode系列之——7. Reverse Integer/9. Palindrome Number(JavaScript)_第1张图片
  Palindrome Number:
LeetCode系列之——7. Reverse Integer/9. Palindrome Number(JavaScript)_第2张图片

分析

  看完题目要求,大家估计就知道为什么把这两个题目放到一起了,都是有关回文数字的题目。题目都不难,主要注意下题目要求,第七题要求出参是32位整型,如果不是,返回0(这个在javascript中貌似没有多大意义…)。第九题要求负数不能是回文数。先来看第七题的代码:

A:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    x.toString().match(/([^\d]?)(\d+)/);
    var sign = RegExp.$1;
    var result = Number(sign+RegExp.$2.split('').reverse().join(''));
    //注意处理32位有符号整型的要求
    return (result>2147483648 || result<-2147483649)?0:result
};

利用了数组的reverse方法,再来看个不用reverse的方法:

/**
 * @param {number} x
 * @return {number}
 */
var reverse = function(x) {
    let result = 0
    while(x) {
        result = result * 10 + x % 10 
        x = ~~(x / 10)
    }
    if (result > 2147483648 || result < -2147483649) result = 0

    return result
};

根据leetcode的执行结果可以看到两种方法的执行效率是基本一样的,时间复杂度为O(lgn)。

再来看第九题:

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    //不考虑负数
    if(x < 0){
        return false;
    }
    var s = x.toString()
    if(s.split('').reverse().join('') === s){
        return true;
    }else{
        return false;
    }
};

我发现如果把返回语句写成这样:

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    //不考虑负数
    //x.toString().match(/([^\d]?)(\d+)/)
    if(x < 0)
        return false;
    var s = x.toString();
    return s.split('').reverse().join('') === s
};

效率会有所下降,这里不知道是不是涉及一些隐式的运算和转换,请大神解答下!

你可能感兴趣的:(数据结构和算法)