"数字的镜子魔法:探索回文数字的神奇世界"
前言
在编程中,判断数字是否为回文是个有趣的问题。JavaScript 提供了多种方法来实现,每一种都有其独特之处。本文将对这些方法进行探讨,让我们一起走进回文判断的世界,感受 JavaScript 的魅力。
题目(力扣9)
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数
是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
题解
解决这个问题我们可以用两种思路去解决。
- 将数转化为字符串,然后判断该字符串和逆序字符串是否相同。
- 将数转化为字符串,通过循环从左右开始同时向中间判断每一个字符是否相同
方法一(固有方法实现逆序)
/**
* @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
};
- 通过
x.toString()
将数转化为字符串。 - 通过
str.split('')
方法将字符串转化为数组。 - 通过
arr.reverse().join('')
将数组逆序后转化为字符串。 - 判断原字符串和逆序字符串是否相同,如果相同便返回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
};
- 通过
x.toString()
将数转化为字符串。 - 创建newStr存储逆序字符串。
- 通过for循环从后往前遍历实现逆序。
- 判断原字符串和逆序字符串是否相同,如果相同便返回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
};
- 通过
x.toString()
将数转化为字符串。 - 从字符串的开头开始循环,循环到长度的一半位置;如果当前位置的字符与对应位置(从末尾开始倒数)的字符不相等,就返回 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
};
- 通过
x.toString()
将数转化为字符串。 - 使用两个指针,一个从字符串的开头(i=0),一个从字符串的末尾(j=str.length-1)。
- 通过循环比较两个指针所指向位置的字符,如果不相等则返回 false,表示不是回文。
- 循环过程中,指针 i递增,指针 j 递减,直到两个指针相遇。
- 如果循环结束都没有找到不相等的字符,则返回 true,表示是回文。
小结
赶快去通关回文数算法题吧。
转载自:https://juejin.cn/post/7363569085442342912