【力扣】回文数,反转一半数字 + 字符串

回文数原题地址

方法一:反转一半数字

考虑特殊情况:

  1. 负数不是回文数,如 -123 ,反过来为 321- 。
  2. 个位数为零的非零数不是回文数,比如 120 ,反过来为 021 。

对于一般情况,我们只需要取出后半段反转再跟前半段比较,若相等或差一位,则原数是回文数。如:

  1. 12321 ,后半段 321 反转为 123 ,前半段 12 , 123 和 12 差一位,是回文数。
  2. 1221 ,后半段 21 反转为 12 ,前半段 12 , 12 和 12 相等,是回文数。
  3. 12324 ,后半段 324 反转为 423 ,前半段 12 , 423 和 12 既不相等,也不是差一位,不是回文数。
  4. 1223,后半段 23 反转为 32 ,前半段 12 , 32 和 12 既不相等,也不是差一位,不是回文数。

为什么不是直接反转整体呢?因为反转后的数据有可能超出INT_MAX,导致溢出

注意到整数操作的3个技巧:

  1. xmod10 可以取出 x 的最低位。如 x=123 , xmod10=3 。
  2. x=x*10+y ,0≤y≤9 ,可以在 x 后面续上 y 。如 x=123 , y=4 ,那么经过这个操作后 x=1234 。
  3. x/=10 可以去掉 x 的最低位。如 x=123 , x/=10 , x=12 。

如何反转呢?取 r=0 ,每次用技巧 1 取出 x 的最低位,再用技巧 2 续到 r 上,最后用技巧 3 去掉 x 的最低位。如:

  1. x=12321 , r=0→x=1232 , r=1→x=123 , r=12→x=12 , r=123 。
  2. x=1221 , r=0→x=122 , r=1→x=12 , r=12 。

什么时候才处理完一半的位数呢?显然, r 的位数越来越大, x 的位数越来越小,当 r 的位数 ≥x 的位数时,即 r≥x 时就处理完了。偶数位的回文数处理到最后满足 x==r (参考一般情况的案例 1 ),奇数位的回文数处理到最后满足 x==r/10 (参考一般情况的案例 2 )。如果不满足 x==r 或 x==r/10 ,则不是回文数。

// 方法一:反转一半数字
class Solution
{
public:bool isPalindrome(int x){// 负数和个位数为零的非零数if (x < 0 || (x % 10 == 0 && x != 0)){return false;}// 反转 x 右半边的数字int rev = 0;// 当 rev 的位数超过 x (或相等)时// 说明反转了一半的数字while (rev < x){// 把 x 的最低位续到 rev 上rev = rev * 10 + x % 10;// 去掉 x 的最低位x /= 10;}// 此时 rev>=x// 若 x 原本是回文数,则此时 x 和 rev 相等或者差一位return x == rev || x == rev / 10;}
};

方法二:字符串

我们也可以先把整数转换为字符串,再判断字符串是否为回文串

整数转换为字符串可以使用整数处理技巧 2 和 3 ,每次取出最低位插入到字符串中,这样转换出来的字符串和原来的整数是反过来的,如 123 转换为字符串后就变成了 "321" ,但是是否回文的性质不变。也可以直接调用库里的方法,如 C++ 中的 to_string 。

判断回文串的思路是:取2个指针指向最左边和最右边的字符,从2边向中间移动,判断沿途的字符是否相同,如果都相同就是回文串。或者直接判断反转后的字符串是否和原字符串相同

// 方法二:字符串
class Solution
{
public:bool isPalindrome(int x){string s1, s2;s1 = s2 = to_string(x);reverse(s1.begin(), s1.end());return s1 == s2;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/676182.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

容器基础:Docker 镜像如何保证部署的一致性?

Docker 镜像如何通过固化基础环境、固化依赖性和固化软件启动流程保证部署的一致性 Docker 镜像通过以下三个方面保证部署的一致性&#xff1a; 1. 固化基础环境: 镜像包含构建应用程序所需的所有环境依赖项&#xff0c;例如操作系统、库和工具。构建镜像时&#xff0c;所有…

Rust语言入门(第3篇)

引用与借用 上一篇中&#xff0c;我们介绍了rust的所有权概念&#xff0c;若直接传递变量做函数参数&#xff0c;堆上的变量就会失去所有权&#xff0c;而栈上变量则由于复制&#xff0c;仍有所有权。 fn main(){let b 3;makes_copy(b);println!("after using a variab…

STM32之USART

概述 串口通信&#xff0c;通用异步收发传输器&#xff08;Universal Asynchronous Receiver/Transmitter &#xff09;&#xff0c;简称UART&#xff1b;而USART&#xff08;Universal Synchronous/Asynchronous Receiver/Transmitter&#xff09;通用同步收发传输器。 USAR…

python学习笔记 -- 字符串

目录 一、输出字符串的格式 二、字符串的一些函数 1、len函数&#xff1a;字符串长度 2、查找字符所在位置index 3、某字符在字符串中的个数count 4、字符切片 对字符串进行翻转 -- 利用步长 5、修改大小写字母&#xff1a; 6、判断开头和结尾 7、拆分字符串 一、输出…

Transformer实战-系列教程13:DETR 算法解读

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 1、物体检测 说到目标检测你能想到什么 faster-rcnn系列&#xff0c;开山之作&…

点云——噪声(代码)

本人硕士期间研究的方向就是三维目标点云跟踪&#xff0c;对点云和跟踪有着较为深入的理解&#xff0c;但一直忙于实习未进行梳理&#xff0c;今天趁着在家休息对点云的噪声进行梳理&#xff0c;因为预处理对于点云项目是至关重要的&#xff0c;所有代码都是近期重新复现过。 这…

2022年全国青少年信息素养大赛 第8届Python编程挑战赛(小学组)复赛试题解析

2022年全国青少年信息素养大赛 第8届Python编程挑战赛(小学组)复赛试题解析T1. 分草莓 小明邀请了四个同学一起游玩,带了一盒草莓平均分给大家一起吃,任意输入草莓的数量n,输出每个人可以分到几颗草莓,最后剩下了几颗。 注意: input()内不添加任何参数 只有完全正确才可…

shell脚本之无限计时器

无限计时器 a0while : dolet aecho $asleep 1 done新建一个.sh结尾的文件复制粘贴进去即可使用&#xff01;

保育员答案在哪搜?这4款足够解决问题 #媒体#其他#其他

学会运用各类学习辅助工具和资料&#xff0c;是大学生培养自主学习能力和信息获取能力的重要途径之一。 1.石墨文档 石墨文档(Shimo Docs)是一款强大的在线文档协作工具。它提供了多人实时协作、版本控制、评论和批注等功能&#xff0c;方便学生在学习中进行文档编写、合作项…

Qt安装配置教程windows版(包括:Qt5.8.0版本,Qt5.12,Qt5.14版本下载安装教程)(亲测可行)

目录 Qt5.8.0版本安装教程Qt5.8.0版本下载安装 Qt5.12.2版本安装教程下载安装 Qt 5.14.2安装教程下载安装和创建项目 参考视频 QT为嵌入式系统提供了大量的库和可重用组件。 WPS Office&#xff0c;咪咕音乐&#xff0c;Linux桌面环境等都是QT开发的。 Qt5.8.0版本安装教程 Q…

Kotlin手记(一):基础大杂烩

Kotlin简介 2011年7月&#xff0c;JetBrains推出Kotlin项目&#xff0c;这是一个面向JVM的新语言 2012年2月&#xff0c;JetBrains以Apache 2许可证开源此项目。 2016年2月15日&#xff0c;Kotlin v1.0发布&#xff0c;这被认为是第一个官方稳定版本。 在Google I/O 2017中&am…

探索Spring Validation:优雅实现后端数据验证的艺术

在现代Web应用开发中&#xff0c;数据验证是一项至关重要的任务&#xff0c;确保应用程序接收到的用户输入符合预期规范&#xff0c;不仅能够提高系统的健壮性&#xff0c;也能有效防止潜在的安全漏洞。Spring Framework通过其内置的Spring Validation模块&#xff0c;为我们提…

机器学习系列——(十一)回归

引言 在机器学习领域&#xff0c;回归是一种常见的监督学习任务&#xff0c;它主要用于预测数值型目标变量。回归分析能够通过对输入特征与目标变量之间的关系建模&#xff0c;从而对未知数据做出预测。 概念 回归是机器学习中的一种监督学习方法&#xff0c;用于预测数值型目…

yo!这里是Linux线程保姆级入门介绍

目录 前言 Linux线程基础 线程概念 底层示意图 线程vs进程 Linux线程控制 创建线程 线程ID 线程终止 线程等待 线程分离 Linux线程互斥 背景概念 互斥量mutex 1.相关接口 2.实现原理 可重入vs线程安全 死锁 Linux线程同步 条件变量 生产者消费者模型 基于…

文本格式和二进制格式的区别

聊聊字符集&#xff0c;我个人理解不管是文本数据UTF-8、GBK编码格式还是二进制数据&#xff0c;其实内存存储的永远都是“01”数据。二进制存储就是将内存“01”数据拷贝到磁盘里。文本在内存中也是“01”数据&#xff0c;存储文本数据就是将“01”数据拷贝到磁盘里。所以存储…

MacOS 查AirPods 电量技巧:可实现低电量提醒、自动弹窗

要怎么透过macOS 来查询AirPods 电量呢&#xff1f;当AirPods 和Mac 配对后&#xff0c;有的朋友想通过Mac来查询AirPods有多少电量&#xff0c;这个里有几个技巧&#xff0c;下面我们来介绍一下。 透过Mac 查AirPods 电量技巧 技巧1. 利用状态列上音量功能查询 如要使用此功能…

Linux 命令行的世界 :2.文件系统中跳转

我们需要学习的第一件事&#xff08;除了打字之外&#xff09;是如何在 Linux 文件系统中跳转。在这一章节中&#xff0c;我们将介绍以下命令&#xff1a;pwd 打印出当前工作目录名 cd 更改目录 ls 列出目录内容 Linux以分层目录结构来组织所有文件。这就意味着所有文件…

FastJson、Jackson使用AOP切面进行日志打印异常

FastJson、Jackson使用AOP切面进行日志打印异常 一、概述 1、问题详情 使用FastJson、Jackson进行日志打印时分别包如下错误&#xff1a; 源码&#xff1a; //fastjon log.info("\nRequest Info :{} \n"&#xff0c; JSON.toJSONString(requestInfo)); //jackson …

人力资源智能化管理项目(day04:组织架构)

学习源码可以看我的个人前端学习笔记 (github.com):qdxzw/humanResourceIntelligentManagementProject 觉得有帮助的同学&#xff0c;可以点心心支持一下哈 树组件应用 <!-- 展示树形结构 --><!-- default-expand-all默认展开所有节点 --><el-tree default-ex…

CTFshow web(命令执行 41-44)

web41 <?php /* # -*- coding: utf-8 -*- # Author: 羽 # Date: 2020-09-05 20:31:22 # Last Modified by: h1xa # Last Modified time: 2020-09-05 22:40:07 # email: 1341963450qq.com # link: https://ctf.show */ if(isset($_POST[c])){ $c $_POST[c]; if(!p…