题目描述
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
示例 4:
输入:x = -101
输出:false
思路分析
- 首先明确,负数肯定都不是,那么接下来考虑非负数
- 最先想到的就是像7. 整数反转那样,反转过来再比较值
- 再想一下,既然是回文数,那么其实可以不用整个反转,只要反转一半,就可以比较出是否回文。这样理论上可以快一半。
AC代码
借助整数反转
func isPalindrome(x int) bool {
if x < 0 {
return false
}
return x == reverse(x)
}
func reverse(x int) int {
rst := 0
for x != 0 {
if rst < math.MinInt32/10 || rst > math.MaxInt32/10 {
return 0
}
val := x % 10
x = x / 10
rst = rst*10 + val
}
return rst
}
反转一半
func isPalindrome(x int) bool {
if x < 0 {
return false
}
xstr := strconv.Itoa(x)
for h, t := 0, len(xstr)-1; h < t; h, t = h+1, t-1 {
if xstr[h] != xstr[t] {
return false
}
}
return true
}
总结
- 不知道leetcode的golang的提交是不是数据不多,反转一半的方法AC之后时间可以超过100%的提交