简介

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例1:

输入: 121
输出: true

示例2:

输入: -121
输出: false
解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。

示例3:

输入: 10
输出: false
解释: 从右向左读, 为 01 。因此它不是一个回文数。

进阶: 你能不将整数转为字符串来解决这个问题吗?

解题思路

我们可以将x折半,然后比较这个两个数的大小。 例如

123454321 折半后为 12345和1234,因为x为奇数,所有将前面的数除于10后,两个数相等,因此是回文
12344321 同样,偶数也可通过这样来判断。只不过没有除于10

func isPalindrome(x int) bool {
	// 当x为负数或者,个位数为0的话,那么这个数一定不是回文数
	if x < 0 || (x != 0 && x%10 == 0) {
		return false
	}

	num := 0

	// x <= num
	for x > num {
		num = num*10 + x%10
		x /= 10
	}
	return x == num || x == num/10
}

第二种,将x转变成字符串


func isPalindrome(x int) bool {
	// 当x为负数或者,个位数为0的话,那么这个数一定不是回文数
	if x < 0 || (x != 0 && x%10 == 0) {
		return false
	}

	str := strconv.Itoa(x)
	fmt.Println(str)
	str2 := Reverse(str)
	return  str2 == str
}
// 字符串反转
func reverse(s string) string {
	s1 := []rune(s)
	for i := 0; i < len(s1)/2; i++ {
		tmp := s1[i]
		s1[i] = s1[len(s1)-1-i]
		s1[len(s1)-1-i] = tmp
	}
	return string(s1)
}