当前位置: 首页 > article >正文

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
}


http://www.kler.cn/a/382063.html

相关文章:

  • nginx系列--(三)--http
  • 深度体验SCNet超算平台:SCNet「AI跃升季」·谁是下一个“AI”跃人?
  • 软件测试基础九 (python基础)
  • 【JAVA】java 企业微信信息推送
  • 如何无缝更换WordPress主题:关键步骤详解
  • React 组件生命周期与 Hooks 简明指南
  • Redis(2):内存模型
  • java:题目:用Java实现简单的自取取款操作
  • Leetcode 第 422 场周赛题解
  • Flutter中有趣的级联语法
  • 蓝桥杯真题——三角回文数(C语言)
  • PCL 点云配准 精度评价指标均方根误差(RMSE)
  • ASP .NET CORE 6 在项目中集成WatchDog开源项目
  • 社区养老服务小程序ssm+论文源码调试讲解
  • Mac M1 Docker创建Rocketmq集群并接入Springboot项目
  • 《Keras3 深度学习初探:开启Keras3 深度学习之旅》
  • 关注AI技术的应用前景,抓住未来科技发展的机遇!
  • 闪存学习_2:Flash-Aware Computing from Jihong Kim
  • 蓝桥杯练习笔记(二十-日期问题)
  • Docker篇(数据卷)
  • GaussDB的向量化处理技术
  • uniapp推送配置流程
  • 高科技行业知识库搭建:驱动创新与效率的双引擎
  • 【大咖云集,院士出席 | ACM独立出版】第四届大数据、人工智能与风险管理国际学术会议 (ICBAR 2024,11月15-17日)--冬季主会场
  • AWTK-WEB 新版改动细节
  • 一篇文章理解CSS垂直布局方法