给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
输入: 123 输出: 321 输入: -123 输出: -321 输入: 120 输出: 21
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
这个问题比较简单,就是不断将输入数字通过模除 10 取余的方式给输出就行了,代码如下:
class Solution {
/**
* @param Integer $x
* @return Integer
*/
function reverse($x) {
$ret = 0;
while ($x !== 0) {
$ret = $ret * 10 + $x % 10;
$x = (int) ($x / 10);
}
if (abs($ret) >= 2147483648) return 0;
return $ret;
}
}
因为 PHP 的数字大小范围是 2 的 63 次方(在 64 位机上),又不能像其他某些语言那样,直接定义一个 int32 类型,而且在除的时候会自动转化成浮点数,反而麻烦了一些。不过还好处理也方便。按理说,在循环里面每次给输出加位数的时候判断是否绝对值已经超过 2 的 31 次方是最好的,但 PHP 的特点导致反而算好了再判断还更快一些。如果是其他静态语言来实现,还是写在循环里面执行效率会更高。而且因为静态语言被除之后不会像 PHP 这种动态语言直接变换成浮点,连强行转换成整型都不用了。
LeetCode 刷题之整数反转 by Chris Yue is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.

写作累,服务器还越来越贵
求分担,祝愿好人一生平安
天使打赏人