9.回文数

题目来源:

力扣icon-default.png?t=M85Bhttps://leetcode.cn/problems/palindrome-number/题目简介:

看一个数是不是回文整数。

思路:遍历一半

最简单的就是想到直接反转这个顺序表,然后检查反转后的和没反转之前的一不一致,这样确实思路很简单,如果给出的这个数一开始就大于int的范围,那么程序就无法执行,如果在int范围内那么就可以正常执行,但这个方法有一个弊端就是执行时间太长了,所以我们可以为了提高效率我们可以只反转一半的顺序表,然后记录反转的那部分和剩下的那部分是否一致,反转过程也很简单,就可以用一个while循环先把x%10,得到x的个位数,记录在变量i里面,然后再用x/10去掉x的那个个位数,最关键的一步就是创建一个变量rest,使rest=rest*10+i,一开始rest为0,所以第一轮计算得到的rest就是x的个位数,然后一直循环,我们用一个if语句时刻监测切这个x的过程,一旦发现rest>=x,我们就进入if语句,然后分奇数偶数的对x和rest进行对比,如果相等就返回true

代码实现:

bool isPalindrome(int x){
    int rest=0;//比较重要的就是这个里对10的倍数的前提检测,要注意这个特点
    if(x>=0&&x<=9){
        return true;
    }
    if(x<=0||x%10==0){
        return false;
    }
    while(x!=0){
        int i=x%10;
        x/=10;
        rest=rest*10+i;//一定要一步步的思考,可以用一个数来一步步的思考程序的进行过程
        if(rest>=x){
            if(rest==x){
                return true;
            }
            if(rest/10==x){
                return true;
            }
           break; //在哪里跳出循环也是一个易错的点,这里是分奇数偶数后得到true所以跳出循环
        }
    }
    return false;

}

思路2:数组加双指针遍历对比

我们可以把这个给的x字符串放到一个规定长度的数组里面,然后设定两个指针一前一后来对数组的元素进行对比。

代码实现:

bool isPalindrome(int x){
    if(x>=0&&x<=9){
        return true;
    }
    if(x<=0||x%10==0){
        return false;
    }
    int cnt=0;
    int nums[11];
//分为两个阶段,1.填充数组
这里其实有个比较细的点,就是这个循环语句不用for,而用while,观察第二阶段里,我们仍然需要用到cnt,而在第一阶段如果用for语句的话cnt变量的初始化就变为局部变量,在第二部分就不利于直接使用。
    while(x>0){
        nums[cnt]=x%10;
        x/=10;
        cnt++;
    }
    int left=0;
    int right=cnt-1;
//2.比较前后指针指向的数
    while(left<right){
        if(nums[left]!=nums[right]){
            return false;
        }
        left++;
        right--;
    }
    return true;    
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值