算法日常:整数反转(LeetCode)
K先生
爱技术2403
题目:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。来源:力扣(LeetCode)
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21
注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。上面是题目,下面开始解题。
第一种解法:将整数转化成数组,然后颠倒顺序(似乎和冒泡排序类似),最后再转化为整数即可。
function reverse1($x) {
if ($x != abs($x)) {
$x = abs($x);
$p = 1;
}
$x = str_split($x);//打散为数组
for ($i = 0; $i < count($x) / 2; $i++) {
$tem = $x[$i];
$x[$i] = $x[count($x) - $i - 1];
$x[count($x) - $i - 1] = $tem;
}
$x = intval(implode('', $x));
if ($x > pow(2, 31)) {//判断整数是否溢出
$x = 0;
}
if (!empty($p)) { //判断是否为复制
$x = -$x;
}
return $x;
}
这种解法虽然看起来代码多,但是思路笔记清晰,就是利用str_split()函数先把整数打散为数组,然后就依次将第一位与倒数第一位,第二位与倒数第二位......颠倒位置,最后再转换成数字即可。
第二种解法:
这种方法代码笔记简短,利用的数学方法,就是利用不断取余的方法。来反转整数。
function reverse($x) {
$newx = 0;
while ($x != 0) {
$newx = $newx * 10 + intval($x % 10);
$x = intval($x / 10);
}
if (abs($newx) > pow(2, 31)) {
$newx = 0;
}
return $newx;
}
代码笔记短,认真看一下,相信没什么问题的。
作者:K先生本文地址:http://www.gold404.cn/info/36
版权声明:本文为原创文章,版权归 K先生个人博客 所有,欢迎分享本文,转载请保留出处,谢谢!
上一篇: K先生:今天我们来做个约定吧
文章评论
评论列表