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

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

  • 例如,121 是回文,而 123 不是。

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

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

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

提示:

  • -231 <= x <= 231 - 1

我的题解:

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
func isPalindrome(x int) bool {

y := strconv.Itoa(x)

reversed := Reverse(y)

return reversed == y

}



func Reverse(s string) string {

r := []rune(s)

for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {

r[i], r[j] = r[j], r[i]

}

return string(r)

}

暴力解法,直接转换为字符串倒序比较。

0ms 题解:

1
2
3
4
5
6
7
8
9
10
11
12
13
func isPalindrome(x int) bool { 
if x < 0 || x%10 == 0 && x != 0 {
return false
}
reversed := 0
// 反转数字的一半
for x > reversed {
reversed = reversed*10 + x%10
x /= 10
}
// 当数字长度为奇数时,去掉中间的数字
return x == reversed || x == reversed/10
}

解析:考虑到回文数的特点,首先排除一半的数字,而且若最后一位为 0 的数,其回文数第一位也要为 0,则只能为0,否则返回 false。
接着直接反转数字,比较就行。