LeetCode 刷题之整数反转

LeetCode 刷题之整数反转

Chris Yue No Comment
Posts

给出一个 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.

微信赞赏码

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

发表评论

5 + 5 =