这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战
前言
有人相爱,有人夜里开车看海,有人leetcode第一题都做不出来,由此可见,leetcode的题还是有分量的。今天我们就来会会它们
题目介绍
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
提示:
-231 <= x <= 231 - 1
数字翻转对比法
思路
- 首先判断是否大于0
- 小于0
- 负数一定不是一个回文数,直接返回false
- 大于等于
- 首先把数字转为字符串,然后通过
split方法把字符串切割成数组,类似这样的[1,2,3],然后使用数组reverse方法翻转数组,再把数组转为字符串 - 然后通过
parseInt把字符串转为数组 - 最后对比转后的数字和传入的数字,是否一致,一致的话,表示当前传入的数组是一个回文数,返回
true,否则返回false
- 首先把数字转为字符串,然后通过
- 小于0
解法
var isPalindrome = function (x) {
if (x < 0) return false
let reverseStr = parseInt(x.toString().split('').reverse().join(''))
return reverseStr === x
};
字符串首尾对比法
思路
- 首先判断是否大于0
- 小于0
- 负数一定不是一个回文数,直接返回false
- 大于等于0
- 首先把数字转为字符串,并且获取当前字符串的长度
while循环字符串的长度- 判断,当前字符串的长度是否等于1
- 等于1
- 表示它一定是一个回文数,直接返回
true
- 表示它一定是一个回文数,直接返回
- 否则
- 判断字符串的
第一项和最后一项是否相等- 相等
- 删除字符串中的第一项和最后一项
- 同时,字符串长度 - 2
- 进行下一次循环
- 不相等
表示不是回文数,直接返回
false
- 相等
- 判断字符串的
- 等于1
- 循环结束后,仍然没有返回值,那么证明传入的数字一定是个回文数,返回
true即可
- 小于0
解法
var isPalindrome = function (x) {
if (x < 0) return false
let str = x.toString()
let strLth = str.length
while (strLth) {
if (strLth === 1) return true
if (str[0] === str[strLth - 1]) {
strLth -= 2
str = str.substring(1)
str = str.substring(0, strLth)
} else {
return false
}
}
return true
};
反转一半数字
思路
- 首先我们判断
负数、能被10整除的数都不是回文数, 直接返回false - 接下来,我们要考虑怎么把数字翻转一半,进行对比
- 假如现在有个数字
1221,可以通过1221%10得到最后一个数1 - 想要得到倒数第二个数,那么就要先把原来的数除以10,再取余
Math.floor(1221/10)= 122,再对122%10就得到了2 - 如果这个时候我们把最后一位数
*10再加上倒数第二位数,1*10 + 2= 12,就能获取到反转后的数字了 - 接下来,我们可以通过在每次操作完翻转数字后,对源数据进行
/10的操作,通过对比修改后的源数据和反转后的数据即可 - 又因为,我们不确定要判断多少次,所以使用
while循环 - 循环完成后
- 如果传入的数值是
偶数,直接对比x和反转后的数据reverseNum即可 - 如果传入的数值是
奇数的话,需要把反转后的数据/10之后再和x进行对比
- 如果传入的数值是
解法
function isPalindrome1(x) {
if (x < 0 || (x % 10 === 0 && x !== 0)) return false
let reverseNum = 0
while (x > reverseNum) {
reverseNum = x % 10 + reverseNum * 10
x = Math.floor(x / 10)
}
return x === reverseNum || x === Math.floor(reverseNum / 10)
}
写在最后
- 希望你能收获满满