美文网首页
LeetCode NO. 9 Palindrome Number

LeetCode NO. 9 Palindrome Number

作者: Bryan0114 | 来源:发表于2019-11-04 10:35 被阅读0次

    LeetCode NO. 9 Palindrome Number

    LeetCode 第9题 回文数

    DIFFICULTY(难度)

    EASY


    容易

    DESCRIPTION(题面)

    Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward.


    判断一个整数是否是回文数,回文数就是正读反读都相同的数字

    EXAMPLE(样例)

    ONE

    Input: 121(输入:121)

    Output: true(输出:true)


    输入:121

    输出:true

    TWO

    Input: -121

    Output: false

    Explanation: From left to right, it reads -121. From right to left, it becomes 121-. Therefore it is not a palindrome.


    输入:-121

    输出:false

    解释:从左向右读是-121,从右向左读是121-,因此不是回文数

    THREE

    Input: 10

    Output: false

    Explanation: Reads 01 from right to left. Therefore it is not a palindrome.


    输入:10

    输出:false

    解释:从右向左读为01,因此10不是回文数。

    FOLLOW UP

    Could you solve it without converting the integer to a string?


    你能否在不将整数转化为字符串的情况下,判断出该整数是不是回文数?

    SOLUTION(解题)

    class Solution {
    public:
     bool isPalindrome(int x) {
     if(0 > x || (x % 10 == 0 && x != 0)) {
     return false;
     }
    
     int reversed = 0;
     while(x > reversed) {
     reversed = reversed * 10 + x % 10;
     x = x / 10;
     }
    
     return x == reversed || x == reversed/10;
     }
    };
    

    NOTE(注)

    思路1:转字符串

    将整形转换成字符串,从两侧向内依次比较即可。既然题目提示了不转换字符串的方式判断,何不试一下?

    思路2:反转整个数字

    将整个整数反过来,如果反转数字和原数字相同那就说明这个整数是回文数,第一次提交就是这种方案,结果遇到了reversed越界,因为使用了乘法嘛,越界没有考虑到,改成long类型通过。提交后查看最佳提交的解题思路,如思路3

    思路3:反转数字的一半

    既然会有越界问题,那不计算那么多位就好了,也就是不要把整个数字都反转过来。从思路2的计算过程,原数字x在不断被除10,而余数则是不断的被累加到反转数的低位,那是不是说如果这个数字是回文数,那么当计算到一半的时候,原数字x会与反转数reverse是相等的,所以只要反转一半就好了,那如何判断反转到一半的位置了呢,因为x在不断被除10,reverse不断在低位累加,那么当x小于reverse的时候,就说明已经转换了一半的数字了。


    例1:101

    计算过程变量值

    x reversed
    101 0
    10 1
    1 10

    发现reverse的值其实是比x的最终值要大的,发现reverse的最后一位,就是原x中间的那一位,而这一位并不影响判断这个数是不是回文数,所有的奇数位数的整数都符合这个规律,所以只要判断去掉个位的其余数字相同即可,因此判断条件是 x == reversed/10,如例2

    例2: 10101

    计算过程变量值

    x reversed
    10101 0
    1010 1
    101 10
    10 101

    例3:1001

    计算过程变量值

    x reversed
    1001 0
    100 1
    10 10

    相关文章

      网友评论

          本文标题:LeetCode NO. 9 Palindrome Number

          本文链接:https://www.haomeiwen.com/subject/gszjyctx.html