Leetcode之PHP版题目解析(9. Palindrome Number)


2019-4-8 星期一  开始吧

上一题链接 Leetcode之PHP版题目解析(234. Palindrome Linked List)

a69115900e124c59d2d609b935063a9b.png

题目描述

基于上一题判断是否是回文链表,这题判断是否是一个回文数.

题目分析

基础的解法,首先负数是不可能是回文数字的.如果是回文数字,那么把当前的数反向之后还是和原来的数相等的.

具体实现1

   function isPalindrome($x) {
        if($x<0){
            return false;
        }
        $back=0;$index=$x;
        while($x){
            $back=$back*10+$x%10;
            $x=intval(floor($x/10));
        }
        if($back==$index) {
            return true;
        }else {
            return false;
        }
    }

优化

除了负数不是回文数以外,如果数字以0结尾的也不可能是回文数,尾数是0最高位可没有0和你配对(当然数字是0的话它是回文数),如果是回文数,那么他左半部分和右半部分的反转是一样的.所以我们只需要反转数字的右半部分进行比较即可.

具体实现

   function isPalindrome($x) {
        if($x<0 || $x%10==0 && $x !=0){
            return false;
        }
        $backNumber=0;
        while($x>$backNumber){
            $backNumber=$backNumber*10+$x%10;
            $x =intval(floor($x/10));
        }
        return $x==$backNumber || $x==intval(floor($backNumber /10));
    }

最后return部分,如果数字的长度是奇数位的话,作为一个回文数,数字正中间的位上的数字是不需要进行比较的(自己等于自己),所以需要去掉.


Github整理地址:https://github.com/wuqinqiang/leetcode-php


Vote Vote Cancel Collect Collect Cancel

<< 上一篇: Leetcode PHP题解--D27 620. Not Boring Movies

>> 下一篇: Leetcode PHP题解--D28 884. Uncommon Words from Two Sentences