这是第6篇算法,力扣链接
给你一个整数
x
,如果x
是一个回文整数,返回true
;否则,返回false
。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
- 例如,
121
是回文,而123
不是。
方法一:模拟法
模拟法是最容易想到的,既然是回文数,那么按照取余的逻辑可以重建数字,代码如下:
func isPalindrome1(x int) bool {
nexX, tempX := 0, x
for ; tempX > 0; tempX /= 10 {
nexX = nexX*10 + tempX%10
}
return nexX == x
}
但是其实回文只用处理一半就够了,代码优化如下:
func isPalindrome(x int) bool {
if x < 0 || (x%10 == 0 && x != 0) {
return false
}
newX := 0
for ; x > newX; x /= 10 {
newX = newX*10 + x%10
}
return newX == x || newX/10 == x
}
方法二:二分法
这个方法也很容易想到,从两边各取一个指针,往中间靠拢,但是这个思路需要把原有数字先拆开,这个复杂度远不如模拟法,因此这里不做讲解。