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

Q:

题目链接:Reverse IntegerPalindrome Number
先看题目要求:
  Reverse Integer:
这里写图片描述
  Palindrome Number:
这里写图片描述

分析

  看完题目要求,大家估计就知道为什么把这两个题目放到一起了,都是有关回文数字的题目。题目都不难,主要注意下题目要求,第七题要求出参是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
};

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值