掘金团队号上线,助你 Offer 临门! 点击 查看详情 (opens new window)
# 前言
第一次参加掘金打卡活动,别的不说 主要是奔着奖励来的。4.12开始为了达到14题小目标 冲冲冲!!!这是第七题
# 题目描述
题目描述我用截图leetcode的为主,所以题目如下图
# 思路分析
依照题目可以知道,起先思路很简单 直接转为字符串然后去反转这个字符串 看看反转前后会不会相等,然后就动手试试
一把过 心情愉悦,然后看到进阶下面写着不转为字符串去解决
那重新思考一下这道题 当是数字的时候怎么去判断是不是回文,因为是整数,1:负数的情况肯定非回文 2. 0~9的情况肯定是回文,那就是考虑大于9的情况怎么合理正面了 3.个位是0的也不是回文(010这种应该不是整数10的写法,如果没通过,就把这个考虑去掉)
// 0-9直接返回true
if(x>=0&&x<10){
return true
}
// <0 或个位为0 直接返回false
if(x<0||x%10===0){
return false
}
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
接下来就是考虑大于10的(且个位非0)的情况,整数反转,所以直接上手. 反转操作,( Math.ceil向上取整、Math.floor()去小数取整、Math.round四舍五入)
while(y!=0){
rvNum = y%10+rvNum*10
y=Math.floor(y/10)
}
1
2
3
4
2
3
4
提交一下 通过了 可以对比相对于刚刚转字符串的方法需要内存更多 耗时也增加了
# AC 代码
/**
* @param {number} x
* @return {boolean}
*/
// 1.转为字符串
var isPalindrome = function(x) {
let y=x
return y.toString().split('').reverse().join('') === x.toString()
};
// 2.整数解法
var isPalindrome = function(x) {
if(x>=0&&x<10){
return true
}
if(x<0||x%10===0){
return false
}
let y = x
let rvNum=0
while(y!=0){
rvNum = y%10+rvNum*10
y=Math.floor(y/10)
}
return rvNum===x
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 总结
多动手,多思考。第七题算法完成,坚持就是胜利!!!
↓↓↓
↑↑↑
这里可以点!这里可以点!这里可以点!