題目:整數(shù)反轉(zhuǎn)(Reverse Integer)
給出一個(gè) 32 位的有符號整數(shù)抖拴,你需要將這個(gè)整數(shù)中每位上的數(shù)字進(jìn)行反轉(zhuǎn)志鹃。
示例 1:
輸入: 123
輸出: 321
示例 2:
輸入: -123
輸出: -321
示例 3:
輸入: 120
輸出: 21
注意:
假設(shè)我們的環(huán)境只能存儲得下 32 位的有符號整數(shù),則其數(shù)值范圍為 [?231, 231 ? 1]。請根據(jù)這個(gè)假設(shè),如果反轉(zhuǎn)后整數(shù)溢出那么就返回 0。
解法一:
對傳入數(shù)字進(jìn)行取余操作每次彈出最后一位瞎惫,推入變量ret中,每次再對ret進(jìn)行推入時(shí)译株,要先判斷推入后會(huì)不會(huì)溢出瓜喇。
如果 ret =ret * 10 + pop 導(dǎo)致溢出,那么一定有ret >= xMax/10 或 ret <= xMin/10歉糜;
所以ret > xMax/10 或 ret < xMin/10,那么ret = ret* 10 + pop會(huì)溢出乘寒;
rev == xMax/10,那么只要pop > 7匪补,ret = ret * 10 + pop會(huì)溢出伞辛;
rev == xMin/10,那么只要pop < -8夯缺,ret = ret * 10 + pop會(huì)溢出蚤氏;
class Solution {
/**
* @param Integer $x
* @return Integer
*/
function reverse($x) {
$ret = 0;
$xMin = -pow(2, 31);
$xMax = pow(2, 31) - 1;
while($x != 0){
$pop = $x % 10; //pop為最后一位數(shù)字
if($ret < $xMin / 10 || ($ret == $xMin/10 && $pop < -8)){
return 0;
}
if($ret > $xMax / 10 || ($ret == $xMax/10 && $pop > 7)){
return 0;
}
$ret = $ret * 10 + $pop; //將最后一位推入到的第一位
$x = (int)($x / 10); //彈出最后一位數(shù)字
}
return $ret;
}
}
解法二:
轉(zhuǎn)換成字符串,用php函數(shù)strrev反轉(zhuǎn)字符串踊兜,然后判斷是否溢出竿滨。
class Solution {
/**
* @param Integer $x
* @return Integer
*/
function reverse($x) {
if($x >= 0){
$ret = strrev((string)$x);
}else{
$ret = -strrev((string)abs($x));
}
if($ret > pow(2,31) - 1 || $ret < -pow(2,31)){
return 0;
}else{
return (int)$ret;
}
}
}