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;
}
}
若感觉本文章对你有用,欢送用爱发电赞助。
发表回复