LeetCode_9. 回文数

文章介绍了判断一个整数是否为回文数的三种方法:1)将整数转为字符串,比较数组首尾元素;2)直接对数字进行操作,取出首位进行对比;3)使用StringBuilder容器反转数值再对比。代码示例分别展示了这三种方法的实现。
摘要由CSDN通过智能技术生成

9. 回文数

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

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

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


示例 1:

输入:x = 121
输出:true


示例 2:

输入:x = -121
输出:false
解释:从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。


示例 3:

输入:x = 10
输出:false
解释:从右向左读, 为 01 。因此它不是一个回文数。


代码1

1、思路:根据题目可以看出只要是对称的数都是回文数,看到是给了一个数,第一个想法是把这个数的每位数上的数拿出来进行对比看是否相同,所有先把int类型转换成字符串,再把字符串转换成数组,依次遍历数组来进行前后对比,一旦有对称位置不相同的数,立即返回false,如果遍历完数组后发现都相同,即说明这个数是一个回文数,循环完后返回true.

class Solution {
    public boolean isPalindrome(int x) {
        String a=String.valueOf(x);//把数子转换成字符串
        char[] num=new char[a.length()];
        for(int i=0;i<a.length();i++){
            num[i] = a.charAt(i);
        }
        for (int i=0;i<a.length()/2;i++){
            if(num[i]!=num[a.length()-(i+1)]) {
                return false;
        }
}
        return true;
    }
}

答案还有一个思路我觉得有点繁琐,如果要直接对数字进行对比的话,我们没办法知道这个是有几位数,所有个人觉得很难对比。(如何把去数字的最后一位和第一位进行对比?)

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

代码2

2.思路:考虑不用字符串的方法判断是否为回文数,例回文数为1234,如果要考虑用单纯数字来判度:
(1)要取1和4,4可以直接对10取余,比较难的是如何取1,想到的方法是让1234除以10的4次方就可以取到1
(2)要取2和3,取3可以先将1234-4=1230,然后1230/10=123,然后再对123取余得到3,取2的话,可以先让123-120。

class Solution {
    public boolean isPalindrome(int x) {
        int n,m,num1,num=0,x1=x;
        if(x<0){
             return false;
        }
        while(true){//用while判断这个判断的数有几位数
            x1=x1/10;
            num++;
            if(x1==0){
                break;
            }
        }
         num1=num;
        for(int i=0;i<(num1)/2;i++){//用m和n存储这个数的头尾两个数进行比较判断是否为回文数,每次对比完以后把尾数去掉然后取前面的那位数
            n=x%10;
            m=(x/(int)Math.pow(10,num-(i+1)))%10;
            x=x/10;
            num--;
            if(n!=m){
                return false;
            }
        }
     return true;
}}

代码3

在后续学习中,想到用StringBuilder容器的方法来进行验证,先把数值放入容器中,再在容器中对数值进行反转,再用equals方法进行字符串的对比,运行成功。
但是用容器的方法运行速度好像没有比前两个快。并且占用的内存也挺大的。

class Solution {
    public boolean isPalindrome(int x) {
       String A= String.valueOf(new StringBuilder().append(x).reverse());
       String B= String.valueOf(new StringBuilder().append(x));
       if(A.equals(B)){
           return true;

       }else{
           return false;
       }
}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

是空空.v

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值