【leetcode--golang】9. 回文数

博客围绕判断整数是否为回文数展开,给出多个示例说明判断结果。提出普通解法,即把整数转为字符串再分割数组判断;还给出进阶的数学解法,通过取整和取余操作获取对应数字比较,还探讨了不转字符串解决问题的思路。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

示例

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值