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;
}
}