一、题目描述
给你一个整数 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. 生成倒序数,和原数对比
func isPalindrome(x int) bool {
//若为负数,肯定不是回文数
if x < 0 {
return false
}
back := 0
s := x
rev := []int{}
//将 x 的每一位从尾到头存储到 rev 中
for s > 0 {
back = s % 10 //取x的最低位
rev = append(rev, back)
s = s / 10 //去除x最低位
}
//生成 x 的回文数 backs
var backs float64
j := 0
for i := len(rev) - 1; i > -1; i-- {
backs += float64(rev[i]) * math.Pow(10, float64(j))
j++
}
if backs == float64(x) {
return true
}
return false
}
评判结果:
2. 生成原数后半段的倒序数,和原数前半段对比
func isPalindrome(x int) bool {
if x < 0 || (x%10 == 0 && x != 0) {
return false
}
var back int
for x > back {
back = x % 10 + back * 10
x = x / 10
}
if back == x || back/10 == x {
return true
}
return false
}
评判结果: