题目:
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
例如,121 是回文,而 123 不是。
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/pa… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:
方法一: 暴力解法
注意负数不是回文数
func isPalindrome(x int) bool {
if x < 0 {
return false
}
// 入栈一半数字,依次出栈进行比较
stack := make([]int, 0)
for x != 0 {
stack = append(stack, x % 10)
x = x / 10
}
l, r := 0, len(stack) - 1
for l < r {
if stack[l] != stack[r] {
return false
}
l ++
r --
}
return true
}
方法二:
方法一使用栈保存每一位数字,如果可以利用回文的特性,只使用一半的空间
func isPalindrome(x int) bool {
// 第二个判断条件是x!=0且x=y0时的排除
if x < 0 || (x != 0 && x % 10 == 0) {
return false
}
res := 0
for x > res {
res = res * 10 + x % 10
x = x / 10
}
// x <= res 如果x是回文只能是以下两种情况:
// 情况1:x=123123 此时res:123, x:123
// 情况2:x=1234123 此时res:1234, x:123
// 如果不是回文 res=89 x=0
return res == x || res / 10 == x
}