您现在的位置是:首页 > 后台技术 > 数据结构与算法数据结构与算法
回文数(图文)
第十三双眼睛2023-11-21【数据结构与算法】人已围观
简介回文数
给你一个整数x,如果它是一个回文数,返回true,如果不是,返回false,回文数是指正向和反向都是一样的数
最简单也是最容易想到的方法,就是转成字符串以后,进行倒叙,和原来的字符串进行比较,如果一样,就说明是回文数,如果不一样,就说明不是。代码如下:
第二种方法就是用两个指针,一个从头部向后面移动,一个从后面向前移动,进行比较,比如,第一个字符和最后一个字符进行比较,如果相同,前面的指针后移,后面的指针前移,直到比较完,或者遇到不等的。代码如下:
第三种方法也是最快捷的,也是最好的,首先判断该数是否为复数,复数的话就不是回文数,再判断该数最后一位是不是0,如果是0的话就不是回文数,否则进行下面的判断,按照数的位数进行取数,如果是偶数位,就取一半,比如1234554321,此数是10位数,将后5位数取下来组成一个新的数54321,和前五位进行比较,如果是奇数位,比如123454321,就取后4位下来和前四位进行比较,比如1234。代码如下:
public boolean method1(int x) { String s = x + ""; return new StringBuilder(s).reverse().toString().equals(s); } |
第二种方法就是用两个指针,一个从头部向后面移动,一个从后面向前移动,进行比较,比如,第一个字符和最后一个字符进行比较,如果相同,前面的指针后移,后面的指针前移,直到比较完,或者遇到不等的。代码如下:
public boolean method2(int x) { boolean flag = true; String s = x + ""; char[] chars = s.toCharArray(); int start = 0; int end = chars.length - 1; while (start <= end) { if (chars[start] == chars[end]) { start ++; end --; } else { flag = false; break; } } return flag; } |
第三种方法也是最快捷的,也是最好的,首先判断该数是否为复数,复数的话就不是回文数,再判断该数最后一位是不是0,如果是0的话就不是回文数,否则进行下面的判断,按照数的位数进行取数,如果是偶数位,就取一半,比如1234554321,此数是10位数,将后5位数取下来组成一个新的数54321,和前五位进行比较,如果是奇数位,比如123454321,就取后4位下来和前四位进行比较,比如1234。代码如下:
public boolean method3(int x) { if (x < 0 || (x % 10 ==0 && x != 0)) { return false; } int reverseNum = 0; while (x > reverseNum) { reverseNum = reverseNum * 10 + x % 10; x = x / 10; } return reverseNum == x || reverseNum / 10 == x; } |
Tags:
很赞哦! ()
上一篇:两数之和
下一篇:罗马数字转整数(图文)
相关文章
随机图文
-
移动零(图文)
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作 -
平衡二叉树(图文)
平衡二叉树 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 -
删除有序数组中的重复项(图文)
删除有序数组中的重复项 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过: 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。 返回 k 。 -
选择排序法(图文)
选择排序法