LeetCode题集9回文数整数代码拷贝指针字符串

题目:给你一个整数x,如果x是一个回文整数,返回true;否则,返回false。

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

·例如,121是回文,而123不是。

01、反转字符串法

此题我第一反应就是直接把整数转为字符串,然后通过字符串Reverse方法,反转字符串,最后再比较整数字符串和反转后字符串是否相等即可得出结果。代码实现如下:

02、反转字符数组法

此方法和反转字符串一脉相通,只是实现选用了不同的方法,此法是把整数字符串转为字符数组,然后再深拷贝一份用于反转的字符数组,通过Array.Reverse方法进行反转,最后通过SequenceEqual比较两个字符数组值是否相等。

其中有以下两个点容易出错:

其一因为字符数组是引用类型必须使用深拷贝,而不能像字符串那样直接赋值,深拷贝有很多种办法ToArray是比较简洁的方式;

其二因为本题要求是比较两个字符数组的值是否相等,因此不能直接使用==比较;

具体实现代码如下:

03、双指针法

前面两个方法本质上都是在使用转为字符串的方法处理,我们进阶一下尝试不用转字符串的方式来处理。

虽然不用转字符串的方式,但是我们可以借鉴其思想,比如前面题目处理回文子串思想。我们是否可以像字符串一样,从整数的两端由外向内逐一比较两端的数字,如果都相等则结果为回文数。

在不转成字符串的情况下,怎么拿到整数的首尾数字呢?尾数字可以通过取余的方式获取,那么首数字要怎么获取呢?

比如12345,如果我们想要取到首数字1,那么就可以通过12345/10000=1获取,那么10000要怎么获取呢?我们可以对整数进行循环取整,假设除数div=1,取1次整则div乘10,最终得到10000。

然后我们就可以通过x/div取整获取左边数字,通过x%10取余获取右边数字,然后比较左右是否相等,如果相等则把左右两边已比较过的数字去掉,对剩下的整数继续比较,直至所有数字完成比较。

04、反转全部数字法

双指针法可能逻辑上比较复杂些,那么我们是否可以像字符串一样把整个整数反转过来呢?

其实反转整个数字其实也很简单,可以借鉴上一个方法中,取整取余的方式,把整个整数反转过来,然后直接比较反转后的整数和原整数是否相等即可。

其中需要注意的是一个32位整数反转后可能会导致溢出,因此反转结果我们需要使用64位整数存储。具体实现代码如下:

05、反转一半数字

其实并不需要反转完所有数字我们才能知道是否是回文数,只需要反转完一半我们即可以知道是否为回文数。

比如输入1221,我们可以将数字“1221”的后半部分从“21”反转为“12”,并将其与前半部分“12”进行比较,因为二者相同,我们得知数字1221是回文。

此方法关键点是判断何时结束,以及是回文数的条件是啥。

对于反转一半数字,我们必须考虑到整数的长度是奇数还是偶数,如下图:

由此可以得出当x>revertedNumber时可以结束比较,而满足回文数的条件分奇偶两种情况x==revertedNumber或x==revertedNumber/10。

THE END
1.如何在Python中实现冒泡排序算法?精品笑话分享平台如何在Python中实现冒泡排序算法 概述 冒泡排序是一种简单的排序算法,通过重复地遍历待排序序列,比较相邻元素,并在必要时进行交换,将较大的元素逐渐“冒泡”至序列的末端。该算法在处理小规模数据时效率较高,但在大规模数据处理时效率较低。 原理与步骤 https://joke.verypan.com/index/index/content/id/146476
2.2026考研计算机知识点盘点:排序考研(一)排序的基本概念 (二)插入排序 直接插入排序、折半插入排 (三)起泡排序(BubbleSort) (四)简单选择排序 (五)希尔排序(ShellSort) (六)快速排序 (七)堆排序 (八)二路归并排序(MergeSort) (九)基数排序 (十)外部排序 (十一)各种排序算法的比较https://kaoyan.koolearn.com/20241220/1789631.html
3.初阶数据结构常见五大排序算法及部分算法优化讨论1.2常见的排序算法 代码语言:javascript 复制 // 排序实现的接口// 插入排序voidInsertSort(int*a,int n);// 希尔排序voidShellSort(int*a,int n);// 选择排序voidSelectSort(int*a,int n);// 堆排序voidAdjustDwon(int*a,int n,int root);voidHeapSort(int*a,int n);// 冒泡排序voidBubbleSort(inhttps://cloud.tencent.com.cn/developer/article/2476881
4.一.排序问题及二分法查找。raptor输入变量怎么填当所有的元素都经过至少一次的比较后,冒泡排序过程完成。此时,数组中的元素是按照从小到大的顺序排列的。 动画图: raptor图: c代码: #define_CRT_SECURE_NO_WARNINGS 1 #include<stdio.h> #include<stdlib.h> #include intmain() { inta[10],t; srand((unsignedhttps://blog.csdn.net/2302_80105876/article/details/135137844
5.教学课件RAPTOR流程图+算法设计教程.ppt教学课件 RAPTOR流程图+算法设计教程.ppt 关闭预览 想预览更多内容,点击免费在线预览全文 免费在线预览全文 9.2 递推算法 在自然界中,所有事物都随着时间的推移呈现出微妙的变化。许多现象的变化是有规律可循的,这种规律往往呈现出前因后果的关系,即某些现象的变化和紧靠它前面的一个或一些结果密切相关。递推的思想https://max.book118.com/html/2021/0121/6012141045003053.shtm
6.Raptor之冒泡排序法技术标签:Raptor冒泡排序流程图算法 1.问题描述 对20个20到100范围的随机整数进行从小到大排序操作(使用冒泡排序法) 2.问题思路 首先,20个数据我们需要用一维数组来进行数据存储 其次,我们要让每个数据在20到100之间,并且是整数,这就涉及到了任意范围随机数的生成问题,具体可以看我之前博客里面Raptor中生成任意范围随https://www.pianshen.com/article/92701219742/
7.raptor吧本吧热帖: 1-求助初学者 2-救救孩子吧? 3-求助下载失败 4-哪位大神可以帮助一下1到20的阶乘之和的算法流程图 5-如何使用raptor 6-调用不了子图 7-求助求助求助 8-大佬求助! 9-标题五个字 10-代做raptor,价低,可先看成品http://nba.baidu.com/f?kw=raptor&fr=home
8.rapidjsonAddMember添加数组raptor怎么输入数组数组.sort()数组排序,默认从小到大,只能判断每个元素的第一位数,适用与10以下的数 六、数组排序 1.冒泡排序:将相邻两个元素进行比较并交换位置,具体原理代码如下 var arr https://blog.51cto.com/u_16099314/10335803
9.资讯科技暨南大学5.算法与程序 5.1算法的概念与表示 5.2常用排序算法——选择与冒泡排序 5.3常用查找算法——顺序与二分查找 5.4算法效率分析举例 5.5算法可视化工具Raptor简介 5.6 Raptor实现二分查找 5.7算法与程序 5.8我的第一个Python程序 5.9 Python控制结构 6.网络基础 https://next.xuetangx.com/course/jnu08091005288/14714762