amcode
amcode
发布于 2个月前

PHP 版 LeetCode 代码实现——7. Reverse Integer(整数反转)

题目描述

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

注意:

假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−2^31, 2^31 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

题解

解法一

class Solution {

    /**
     * @param Integer $x
     * @return Integer
     */
    function reverse($x) {      

        $ls_negative = ''; 

        if (strpos($x, '-') === 0) {

            $ls_negative = substr($x, 0, 1);

            $x = substr($x, 1);
        }

        $la_chars = str_split($x);

        $la_chars = array_reverse($la_chars);

        $li_result = intval($ls_negative . implode('', $la_chars));

        if ($li_result > 2147483647 || $li_result < -2147483647) {
            $li_result = 0; 
        }

        return $li_result;
    }
}

解法二

class Solution {

    /**
     * @param Integer $x
     * @return Integer
     */
    function reverse($x) {

        $symbol = 1;
        if ($x < 0) $symbol = -1;
        $x *= $symbol;

        $temp = strrev($x);
        $temp = intval($temp) * $symbol;

        if ($temp >= pow(2, 31) - 1) return 0;
        if ($temp <= pow(2, 31) * -1) return 0;

        return $temp;

    }
}

解法三

class Solution {

    /**
     * @param Integer $x
     * @return Integer
     */
    function reverse($x) {
        if($x == 0)
            return $x;
        $num = abs($x);
        $sign = $x<0 ? -1 : 1;
        $digits = array();
        while($num>0){
            array_push($digits, $num%10);
            $num = floor($num/10);
        }
        $reversedNum = 0;
        $factor = 1;
        for($i = count($digits)-1; $i>=0; --$i) {
            $reversedNum += $digits[$i]*$factor;
            $factor*= 10;
        }
        if(($sign>0 && $reversedNum > 2147483648-1) || ($sign<0 && $reversedNum >2147483648))
            return 0;
        return $sign*$reversedNum;
    }
}

解法四

class Solution {

    /**
     * @param Integer $x
     * @return Integer
     */
    function reverse($x) {

        $x = strval($x);
        $minus = "";
        if($x[0] === '-'){

            $minus = "-";
            $x = substr($x, 1);

        }

        $x = intval($minus.strval(intval(strrev($x))));

        if($x > 2147483647 || $x < -2147483648){

            return 0;

        }

        return  $x;

    }
}

>>> PHP 版 LeetCode 代码实现——总目录