2021.11.14 每天进步一点点: 力扣算法题9

这里写目录标题

题目介绍

在这里插入图片描述
在这里插入图片描述

思路

这次不让把数字转换成字符串了, 所以要换个思路了。

比较常用的方法就是 取模。

首先要排除几种情况:

  • x为0, 肯定是回文数字
  • x超出阈值 或者为负 或者末尾为0的数字, 都不是回文数字。

然后考虑正常的数字情况,假定x是123:

  • x如果是回文,那么x反转之后的值,一定是等于x本身的。所以本题目标是反转数字x,然后进行比较。
  • 这次采取逐步剥离x的方法
  • 首先,用变量y获取到初始的x值,即123 , 然后设置反转后的数字为num
  • 对x做第一层剥离:x % 10 = 3 ,然后把3从x中去掉,让x变成12 . 然后让num去接收剥离后的数字。 即现在num = 3 .
  • 对x做第二层剥离: x % 10 = 2, 然后把2 从x中去掉,让x变成1 . 然后让num接收剥离后的两个数字,一个是3,一个是2, 稍微处理, 3* 10 + 2 = 32, 那么num现在就是32, 而x现在是1 .
  • 对x做第三层剥离: x % 10 = 1, 然后把1从x中去掉,x就变成了0, 然后让num接收剥离后的第三个数字,一个是前面的32, 一个是刚接收的1 ,稍微处理, 32 * 10 + 1 = 321 ,此时的num就是321, 而x现在变成了0
  • 当x变成了0, 剥离结束。
  • 这时的y是最初的x值,即123, 而num是反转后的值, 即321
  • 就看y和num是不是相等,如果相等,那么x就是回文数字。 如果不相等, x就不是回文数字。
代码

思路已经打开, 现在直接写代码:

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function(x) {
    if(x === 0) {
        return true;
    }
    if(x > (Math.pow(2, 31) - 1) || x < (- Math.pow(2, 31)) || x < 0 || (x % 10 === 0)) {
        return false;
    }

    var num = 0, y = x;

    while(x > 0) {
        num = num * 10 + x % 10;
        x = Math.floor(x / 10);
    }

    return num === y;
    
};

测试结果

在这里插入图片描述


目描述: 给你两个版本号 version1 和 version2 ,请你比较它们。 版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由多位数字组成,可能包含前导零。每个版本号至少包含一个字符。修订号从左到右编号,下标从0开始,最左边的修订号下标为0 ,下一个修订号下标为1,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。 比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。也就是说,修订号1和修订号001相等。如果版本号没有指定某个下标处的修订号,则该修订号视为0。例如,版本1.0 小于版本1.1,因为它们下标为0的修订号相同,而下标为1的修订号分别为0和1,0 < 1。 返回规则如下: 如果 version1 > version2 返回 1, 如果 version1 < version2 返回 -1, 否则返回 0。 示例 1: 输入:version1 = "1.01", version2 = "1.001" 输出:0 解释:忽略前导零,"01" 和 "001" 都表示相同的整数 "1" 示例 2: 输入:version1 = "1.0", version2 = "1.0.0" 输出:0 解释:version1 没有指定下标为 2 的修订号,即视为 "0" 示例 3: 输入:version1 = "0.1", version2 = "1.1" 输出:-1 解释:version1 中下标为 0 的修订号是 0,version2 中下标为 0 的修订号是 1 。0 < 1,所以 version1 < version2 示例 4: 输入:version1 = "1.0.1", version2 = "1" 输出:1 示例 5: 输入:version1 = "7.5.2.4", version2 = "7.5.3" 输出:-1 提示: 1 <= version1.length, version2.length <= 500 version1 和 version2 仅包含数字和 '.' version1 和 version2 都是 有效版本号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值