likes
comments
collection
share

"数字的镜子魔法:探索回文数字的神奇世界"

作者站长头像
站长
· 阅读数 21

前言

在编程中,判断数字是否为回文是个有趣的问题。JavaScript 提供了多种方法来实现,每一种都有其独特之处。本文将对这些方法进行探讨,让我们一起走进回文判断的世界,感受 JavaScript 的魅力。

题目(力扣9)

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false

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

例如,121 是回文,而 123 不是。
示例 1:

输入:x = 121
输出:true
示例 2:

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

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。

题解

解决这个问题我们可以用两种思路去解决。

  1. 将数转化为字符串,然后判断该字符串和逆序字符串是否相同。
  2. 将数转化为字符串,通过循环从左右开始同时向中间判断每一个字符是否相同

方法一(固有方法实现逆序)

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function (x) {
    var str = x.toString()
    var arr = str.split('')
    var newStr = arr.reverse().join('')
    if (str == newStr)
        return true
    else
        return false
};
  1. 通过 x.toString()将数转化为字符串。
  2. 通过str.split('')方法将字符串转化为数组。
  3. 通过 arr.reverse().join('')将数组逆序后转化为字符串。
  4. 判断原字符串和逆序字符串是否相同,如果相同便返回true,否则返回false。

方法二(手动遍历实现逆序)

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function (x) {
    var str = x.toString()
    var newStr = ''
    for (var i = str.length - 1; i >= 0; i--) {
        newStr += str[i]
    }
    if (newStr == str)
        return true
    else
        return false
};
  1. 通过 x.toString()将数转化为字符串。
  2. 创建newStr存储逆序字符串。
  3. 通过for循环从后往前遍历实现逆序。
  4. 判断原字符串和逆序字符串是否相同,如果相同便返回true,否则返回false。

方法三(左右同时判断是否相同)

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function (x) {
    var str = x.toString()
    const len = str.length
    for (var i = 0; i < len / 2; i++) {
        if (str[i] != str[len - 1 - i])
            return false
    }
    return true
};
  1. 通过 x.toString()将数转化为字符串。
  2. 从字符串的开头开始循环,循环到长度的一半位置;如果当前位置的字符与对应位置(从末尾开始倒数)的字符不相等,就返回 false,表示不是回文;如果循环结束都没有发现不相等的情况,就返回 true,表示是回文。

方法四(双指针)

/**
 * @param {number} x
 * @return {boolean}
 */
var isPalindrome = function (x) {
    var str = x.toString()
    let i = 0
    let j = str.length - 1
    while (i < j) {
        if (str[i] == str[j]) {
            i++
            j--
        } else
            return false
    }
    return true
};
  1. 通过 x.toString()将数转化为字符串。
  2. 使用两个指针,一个从字符串的开头(i=0),一个从字符串的末尾(j=str.length-1)。
  3. 通过循环比较两个指针所指向位置的字符,如果不相等则返回 false,表示不是回文。
  4. 循环过程中,指针 i递增,指针 j 递减,直到两个指针相遇。
  5. 如果循环结束都没有找到不相等的字符,则返回 true,表示是回文。

小结

赶快去通关回文数算法题吧。

转载自:https://juejin.cn/post/7363569085442342912
评论
请登录