前言
什么是回文数?
回文数是一种特殊的数字,无论你从左读还是从右读,其数值都保持不变。下面我将介绍三种方法来判断一个数是否为回文数,如果是则返回true;不是则返回false。
第一种(给定的数是Number类型)
我们可以想到数组有能够让自身翻转的方法
可以尝试将给定的数转为字符串再将字符串转为数组,再将数组进行翻转,数组再转为字符串进行比较。
- 先给定一个数num,再使用toString()方法将num转为字符串,并将结果赋给str。
- 再使用split()方法将字符串str转为数组,再使用reverse()方法将数组进行翻转,将结果赋给arr。
- 再使用join()方法将数组转为字符串,结果赋给newStr。
- 使用三元运算符
str == newStr ? true : false判断这两个字符串是否相等,若相等则返回true,即这个数是回文数;否则返回false,即这个数不是回文数。
let num = 121
function isPalindrome(num) {
let str = num.toString()
let arr = str.split('').reverse()
let newStr = arr.join('')
return str == newStr ? true : false
}
console.log(isPalindrome(121));
打印结果
第二种(给定的数是String类型)
- 我们先得到这个字符的长度赋给len。
- 使用for循环,从字符串的开头开始,只遍历到字符串中间的位置
len/2,因为对于回文数而言,前半部分和后半部分是完全镜像对称的,所以只需要比较前半部分和后半部分的相应字符即可。 - if判断条件
str[i] != str[len - i - 1]用于比较当前索引i处的字符和从末尾开始位置len - i - 1的字符,在比较的过程中如果有任何一个字符不匹配则返回false,即说明其不是回文数。 - 若循环完成且没有发现任何不匹配的字符,则函数返回true,表示输入的字符串是一个回文数。
let str = 'ababa'
function isPalindrome(str) {
const len = str.length
for(i = 0; i < len / 2; i++) {
if(str[i] != str[len - i - 1]) {
return false
}
}
return true
}
console.log(isPalindrome(str))
打印结果
第三种(给定的数是String类型)
使用指针的思想,定义两个指针i和j,分别从字符串的开头和结尾向中间移动,实现逐个比较字符。
- 首先初始化两个指针,i设置为0,指向字符串的起始位置;j设置为
str.length - 1,指向字符串的末位。 - 将字符串str转为数组arr。(这一步其实可以省略,因为在javaScript中,字符串本身就支持通过索引访问字符。)
- 使用一个while循环,if条件判断比较
arr[i]与arr[j]是否相等。如果相等,i增加1,j减少1,使得其向中间移动;若发现arr[i]与arr[j]不相等,则返回false,表明不是一个回文字符串。 - 循环正常结束返回true,表明是一个回文字符串。
let str = 'ababa'
function isPalindrome(str) {
let i = 0
let j = str.length - 1
let arr = str.split('')
while(i < j) {
if(arr[i] == arr[j]) {
i++
j--
}else {
return false
}
}
return true
}
console.log(isPalindrome(str))
打印结果
结论
三种方法判断回文字符串,你学会了吗?