【leetcode--golang】9. 回文数

题目

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

示例

1:输入: 121
输出: true

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

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

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

解决方案

解法一:普通解法最好理解的一种解法就是先将 整数转为字符串 ,然后将字符串分割为数组,只需要循环数组的一半长度进行判断对应元素是否相等即可。

func isPalindrome(x int) bool {
	// 转成字符串反转后判断是否相等
	xStr := strconv.Itoa(x)
	str := []byte(xStr)

	for l, r := 0, len(str)-1; r > l; l, r = l+1, r-1 {
		str[l], str[r] = str[r], str[l]
	}

	return string(str) == xStr
}

解法二:进阶解法—数学解法通过取整和取余操作获取整数中对应的数字进行比较。举个例子:1221 这个数字。通过计算 1221 / 1000, 得首位1通过计算 1221 % 10, 可得末位 1进行比较再将 22 取出来继续比较

func isPalindrome(x int) bool {
	if x == 0 {
		return true
	}

	if x < 0 || x%10 == 0 {
		return false
	}
	if x != reverse(x) {
		return false
	}
	return true
}

func reverse(x int) int {
	var tmp int
	var sum int

	for x != 0 {
		tmp = x % 10
		sum = sum*10 + tmp
		x = x / 10
	}

	return sum
}

猜你喜欢

转载自blog.csdn.net/cbmljs/article/details/90715158