算法原链接
https://leetcode-cn.com/problems/palindrome-number/
解法
package main
import (
"fmt"
"math"
"strconv"
)
func main() {
x := 121
r := isPalindrome1(x)
fmt.Println(r)
}
// 字符串解法
func isPalindrome(x int) bool {
if x < 0 {
return false
}
if x < 10 {
return true
}
s := strconv.Itoa(x)
l := len(s)
var left, right int
if l%2 == 0 {
left = l/2 - 1
right = l / 2
} else {
middle := float64(l) / float64(2)
left = int(middle) - 1
right = int(math.Ceil(middle))
}
left, right = test(s, left, right)
return left == 0 && right == len(s)-1
}
func test(s string, left, right int) (int, int) {
for ; left >= 0 && right < len(s) && s[left] == s[right]; left, right = left-1, right+1 {
}
return left + 1, right - 1
}
// 官方解法
func isPalindrome1(x int) bool {
if x < 0 || (x != 0 && x%10 == 0) {
return false
}
revertedNumber := 0
for revertedNumber < x {
revertedNumber = revertedNumber*10 + x%10
x /= 10
}
return x == revertedNumber || x == revertedNumber/10
}