栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日一题----回文数

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日一题----回文数

题目要求:

给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。(来源:力扣(LeetCode)第九题)

思路1:

最开始接触,第一时间的想法就是把整数转成数组,然后用两个指针,一个从前开始扫描,一个从后开始扫描。都终止于数组长度/2。如果出现一次不一样就返回false。

 Java代码:

class Solution {
    public boolean isPalindrome(int x) {
		char[] s =String.valueOf(x).toCharArray();//转成数组
        for(int i=0,length=s.length;i 

 这只是很简单的考虑,然后突然发现,不因该调用各种函数。如果这样做,都可以只用2行,直接调用把对应的数组转换。

思路2:

不使用各种内置的函数。首先如果一个数是负数,如-123,“-”和“3”不对应,不是回文数。然后只要处理正数就行。处理整数的基本想法就是用一个数表示倒序的数。具体的迭代过程如下所示:

 Java代码:

class Solution {
    public boolean isPalindrome(int x) {
        //负数直接输出
        if(x<0){
            return false;
        }

        int rer = 0;
        int num = x;
        while(num!=0){
            rer = rer*10+num%10;
            num=num/10;//去除最低的位,如123变成12
        }

        return rer==x;
    }
}
思路3:

将思路2简化,只比较一半。原来用数组的时候可以用数组长度的一半来终止。现在不好确定中间终止的地方,只能用数的大小进行比较。具体举例如下。

 

java代码:

class Solution {
    public boolean isPalindrome(int x) {
        //小于0的数和已0结束不为0的数都不是回文数,可以直接判断
        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 (x==reverseNum)||(x==reverseNum/10);
    }
}

我在看力扣时,有人说这个算法有bug。比如143321,会变成143(x)和123(rev),此时143>123,所以变成14和1233。最终用return语句判断false(14==1233),false(14==1233/10),所以还是false。

提交过程:

 

总结:

我觉得这三种思路的通用之处就是双指针的思想,用双向的指针来简化代码。当然上面的思路除了第一个自己写的(比较丑),下面两个都是在参考了讲解后,又写出来的。可能有许多地方的描述比较像当然。主要分享是希望能坚持学下去。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1013214.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号