D132 7. Reverse Integer
題目鏈接
題目分析
這個題目比較簡單,就是給你一個-231~231-1的數(shù)字,要你翻轉(zhuǎn)過來。若超出這個范圍,需要返回0。
解題思路
比較簡單的方法是用strrev函數(shù)翻轉(zhuǎn),也可以用for循環(huán)翻轉(zhuǎn),但要注意符號。
先用是否小于0來判斷有沒有符號。有的話,需要把第一個元素用array_shift函數(shù)彈出來?;蛘邔o定的數(shù)字乘以-1也是一個辦法。
接下來把數(shù)字用str_split函數(shù)轉(zhuǎn)換成數(shù)組,因為我們只需要把數(shù)字的前半部分和后半部分對調(diào),所以for的終止條件只要到一半就好了。
最后,要判斷是否大于給定的區(qū)間。這里要注意,不能用PHP的內(nèi)置常量PHP_INT_MAX和PHP_INT_MIN。因為這個是根據(jù)當前機器的位數(shù)決定的。如果是64位的處理器,它肯定是會大于32位的。
在這里我們直接算出這個數(shù)字,作為類常量存儲。判斷翻轉(zhuǎn)后的結(jié)果是否超出范圍,超出則返回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;
}
}
若覺得本文章對你有用,歡迎用愛發(fā)電資助。