20241106,LeetCode 每日一题,用 Go 实现整数回文数判断
题目
给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。* 例如,121 是回文,而 123 不是。
示例 1:
输入:x = 121
输出:true
示例 2:
输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。
示例 3:
输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。
提示:
- -2^31 <= x <= 2^31 - 1
问题分析
- 121 是回文,因为从前往后和从后往前都一样。
- -121 不是回文,因为负号不能出现在末尾。
- 10 也不是回文,因为从前往后是 "10",但从后往前是 "01"。
思路
通过反转一半的数字来判断是否回文。
1、排除特殊情况:一开始排除一些特殊数字,比如负数肯定不是回文,另外如果一个不是0的整数的个位是0,它也不是回文(因为开头肯定不是0)。
2、逐步反转:从原始整数的最后一位(x%10)开始提取,放到新的整数reversedHalf的末尾(reversedHalf*10 + x%10),然后把这个数字从原整数中剔除(x /= 10)
3、停止条件:当原始整数剩余部分小于新的整数,说明已经反转了一半数字了
4、判断回文:如果是偶数个数,则两个数相等;如果是奇数个数,则 x 就等于 reversedHalf/10,忽略中间的数字。
复杂度
- 时间复杂度: O(log n)
- 空间复杂度: O(1)
代码实现
func isPalindrome(x int) bool {
if x < 0 || (x%10 == 0 && x != 0) {
return false
}
reversedHalf := 0
for x > reversedHalf {
reversedHalf = reversedHalf*10 + x%10
x /= 10
}
return x == reversedHalf || x == reversedHalf/10
}
本文来自博客园,作者:硅基喵,转载请注明原文链接:https://www.cnblogs.com/denglei1024/p/18528369
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!