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

wuchangjian2021-11-14 21:48:18编程学习

这里写目录标题

        • 题目介绍
        • 思路
        • 代码
        • 测试结果

题目介绍

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

思路

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

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

首先要排除几种情况:

  • 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;
    
};

测试结果

在这里插入图片描述


相关文章

python数据类型(1)——基本数据类型

python基本数据类型主要分为数值和字符串两1种,下面让我们一起来...

数据库原理及应用(五)SQL

数据库原理及应用(五)SQL

SQL的功能分类:         数据定义功能DDL(定...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。