9. 回文数

75 阅读1分钟

题目:
给你一个整数 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
}