[PHP In Leetcode 7] Reverse Integer

本文介绍了一种算法,用于反转一个32位有符号整数的数字,并确保结果不会超出整数范围。通过使用PHP实现,文章提供了两种不同的实现方法,一种是逐位提取并重组数字,另一种则是将数字转换为字符串进行操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

Given a 32-bit signed integer, reverse digits of an integer.

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。

示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21

注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。

思路

先提取符号信息并置为正,然后循环提取每一位存储(这时候先截下来的是最低位).
再将其从Array[0]拼起来.(这样可以自动省略最高位的0).最后判断范围,如果溢出就输出0.
(PHP是弱类型,有溢出机制吗?)


代码

class Solution {
    /**
     * @param Integer $x
     * @return Integer
     */
    function reverse($x) {
         $datapan=array();
        if($x<0)
            {
                $signflag=1;//negative number flag
                $x=-$x;
            }
        
        for($bits=0;$x!=0;$bits++)
        {
            $datapan[$bits]=$x%10;
            $x=($x-$datapan[$bits])/10;
        }//Interruption
        
        for($i=0;$i<$bits;$i++)
        {
            $output+=$datapan[$i]*pow(10,$bits-$i-1);
        }
        if($signflag==1)
        {
            $output=-$output;
        }
        if($output>(pow(2,31)-1)||$output<-pow(2,31))
        {
            return 0;
        }
        else
            return $output;  
    }
}

性能情况和总结

在这里插入图片描述
XD 的确写的代码没有充分利用PHP的特性,还是把php当作一个弱类型的C来写的…
看看大部分代码是怎样的:

class Solution {
	function reverse($x) {
		$newx=abs($x);
		$num=strlen($newx);    
		for($i=0;$i<$num;$i++){       	
			$numarray[]=substr($newx,$i,1); 
		}
		$numarray=array_reverse($numarray);
		$newnum=implode($numarray);
		if($x<0){
			$newnum=$newnum*-1;
			if(pow(-2,31)>$newnum){
				return 0;
			}else{
				return $newnum;
			}
		}else{
			$newnum=$newnum*1;
			if(pow(2,31)<$newnum){
				return 0;
			}else{
				return $newnum;
			}
		}	
	}
}

先用abs()提取数字部分,并用strlen()提取数字长度(这里把$x作为了一个字符串).
substr($str,$startdigit,$length)返回每一位顺序储存进$numarray.(注意:$numarray是一个数组)然后直接用array_recerse()反转输出进原数组.
implode()将数组组合为新字符串,最后仍是校验是否溢出.检验溢出的时候只用根据符号检验一个就可以了.

函数的运用还是要学习一个XD

顺便一说,有些强类型语言可以通过类型溢出报错来判断是否应该输出0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值