乐趣区

关于leetcode:Leetcode-PHP题解D132-7-Reverse-Integer

D132 7. Reverse Integer

题目链接

7. Reverse Integer

题目剖析

这个题目比较简单,就是给你一个 -2^31~2^31- 1 的数字,要你翻转过去。若超出这个范畴,须要返回 0。

解题思路

比较简单的办法是用 strrev 函数翻转,也能够用 for 循环翻转,但要留神符号。

先用是否小于 0 来判断有没有符号。有的话,须要把第一个元素用 array\_shift 函数弹出来。或者对给定的数字乘以 - 1 也是一个方法。

接下来把数字用 str\_split 函数转换成数组,因为咱们只须要把数字的前半部分和后半局部对调,所以 for 的终止条件只有到一半就好了。

最初,要判断是否大于给定的区间。这里要留神,不能用 PHP 的内置常量 PHP\_INT\_MAX 和 PHP\_INT\_MIN。因为这个是依据以后机器的位数决定的。如果是 64 位的处理器,它必定是会大于 32 位的。

在这里咱们间接算出这个数字,作为类常量存储。判断翻转后的后果是否超出范围,超出则返回 0 即可。

最终代码

<?php
class Solution {

    /**
     * @param Integer $x
     * @return Integer
     */
    const MAX = 2147483647;
    const MIN = -2147483648;
    function reverse($x) {$x_arr = str_split($x);
        $symbol = 1;
        if($x < 0){
            $symbol = -1;
            array_shift($x_arr);
        }
        $len = count($x_arr);
        for($i = 0; $i< $len / 2; $i++){$temp = $x_arr[$i];
            $x_arr[$i] = $x_arr[$len-$i-1];
            $x_arr[$len-$i-1] = $temp;
        }
        $final = $symbol * implode($x_arr);
        if($final < self::MIN || $final >= self::MAX){return 0;}
        return $final;
    }
}

若感觉本文章对你有用,欢送用爱发电赞助。

退出移动版