0
点赞
收藏
分享

微信扫一扫

LeetCode经典算法题no.9 回文数

张宏涛心理 2022-04-05 阅读 55
java算法

题目:回文数

题目描述:

样例展示:

思路:

1)0为回文数,负数不可,10的整数倍不可

2)以121为例,回文数中间位是不变的,左右对称,这是否意味着进行比较时只需判断前半部分即可?

3)回文数长度为奇数或偶数对最后的return语句的表述会有影响吗?

针对问题2:我们将while循环的范围限制在revertNum<x,因为revertNum是在不断增加,x在不断减少,当revertNum>=x时,则说明此时的revertNum已取到改数一半的位置,回文数左右依据中间位对称,因此无需再往下。

针对问题3:

对于revertNum的获取(通过while循环实现):

从给定数字的最后一位开始获取,乘10是为了和第一次获得的数进行进位相加

revertNum = x % 10 + revertNum * 10;
 x = x / 10;

长度为奇数:仍以121为例

                     

初始值x=121r=0是否满足循环条件(x>r)
第一次循环x=12  r=1
第二次循环x=1r=12

此时x=revertNum/10

长度为偶数:以22为例

初始值x=22r=0是否满足循环条件(x>r)
第一次循环x=2r=2

此时x==revertNum

代码参考:

class Solution {
    public boolean isPalindrome(int x) {
        int revertNum=0; //表示反转后的数字
        if(x == 0){
            return true;
        }
        if(x < 0 ||  x % 10 == 0){
            return false;
        }
        while(revertNum < x){
            //这里的*10可以理解为:方便和下一次得到的revertNum进行拼接
            revertNum = x % 10 + revertNum * 10;
            x = x / 10; 
        }
        //长度是偶数的话直接返回,长度是奇数的话看reverNum/10 和x是否相等
        return revertNum == x || revertNum / 10 == x;
    }
}

举报

相关推荐

0 条评论