美文网首页
leetcode-7. 整数反转

leetcode-7. 整数反转

作者: 简简天天 | 来源:发表于2020-04-05 23:48 被阅读0次

给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
输入: 123
输出: 321
示例 2:
输入: -123
输出: -321
示例 3:
输入: 120
输出: 21


image.png

解题思路一

1.先判断是否负数,获取符号;
2.转换$x为字符串,获取字符长度;
3.循环:根据字符索引替换相应字符位置,循环次数为字符长度的一半(舍弃法取整),即完成了整个字符串的替换;
4.判断是否溢出;

<?php

class Solution
{
    /**
     * 整数反转
     * @param $x
     * @return int|string
     */
    function reverse($x)
    {
        $f = $x < 0 ? '-' : '';//判断正负
        $x = abs($x) . '';// 取绝对值,并且转换成字符串
        $len = strlen($x);// 字符串的长度
        $half = floor(($len-1) / 2);//取一半进行对调
        for ($i = 0; $i < $len; $i++) {
            $target = $len - $i - 1; // 首尾对调
            $tmp = $x[$target];
            $x[$target] = $x[$i];
            $x[$i] = $tmp;
            if ($i == $half) {
                break; //至此已完成整个字符串字符的位置替换
            }
        }
        $x = intval($f . $x);// 字符串转换成整数
        if ($x > 2147483647 || $x < -2147483646) {
            return 0;
        } else {
            return $x;
        }
    }
}
$solution = new Solution();
echo $solution->reverse(-12340).PHP_EOL;
echo $solution->reverse(10).PHP_EOL;
结果:
-4321
1

解题思路二

<?php

class Solution
{
    /**
     * 整数反转
     * @param $x
     * @return int|string
     */
    function reverse($x)
    {
        if ($x == 0) {//特殊情况
            return $x;
        }
        $y = ltrim(strrev("$x"), 0);//反转且剔除左侧的0
        if ($x < 0) {//负数
            $y = rtrim($y, '-') * -1;//剔除右侧的负号,*-1变成负数
            if ($y < -2147483647) {
                return 0;
            }
        }
        if ($y > 2147483647) {
            return 0;
        }
        return $y;
    }
}

$solution = new Solution();
echo $solution->reverse(-12340) . PHP_EOL;
echo $solution->reverse(10) . PHP_EOL;

解题思路三

本题如果不考虑溢出问题,是非常简单的。解决溢出问题有两个思路,第一个思路是通过字符串转换来解决,第二个思路就是通过数学计算来解决。
通过循环将数字x的每一位拆开,在计算新值时每一步都判断是否溢出。

<?php

class Solution
{
    /**
     * 整数反转
     * @param $x
     * @return int|string
     */
    function reverse($x)
    {
        $rev = 0;
        while ($x) {
            if ($x < 0) {
                $flag = -1;
            } else {
                $flag = 1;
            }
            $pop = $x % 10;
            $x = intval(floor(abs($x) / 10)) * $flag;

            if (($rev > 2147483647 / 10) || (($rev == 2147483647 / 10) && ($pop > 2147483647 % 10))) {
                return 0;

            }
            if (($rev < -2147483647 / 10) || (($rev == -2147483647 / 10) && ($pop < -2147483647 % 10))) {
                return 0;
            }
            $rev = intval($rev * 10 + $pop);
        }

        return $rev;
    }
}

$solution = new Solution();
echo $solution->reverse(1534236469) . PHP_EOL;
echo $solution->reverse(-40) . PHP_EOL;
echo $solution->reverse(10) . PHP_EOL;
结果:
0
-4
1

相关文章

  • 一起学算法-7.整数反转

    一、题目 LeetCode-7.整数反转链接:https://leetcode-cn.com/problems/r...

  • leetcode-7. 整数反转

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例...

  • 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 class Solution(object):def re...

  • 反转整数

    题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入: 123输出: 321 示例 ...

  • 整数反转

  • 反转整数

    给定一个32位有符号整数,将整数中的数字进行反转(假设我们的环境只能存储32位有符号整数,其数值范围是[−2(31...

  • 反转整数

    反转整数 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例1: 输入:123输出:321 示例 2: ...

  • 反转整数

    题目描述 给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 输入: 123输出: 321输入: -12...

  • 反转整数

    给定一个 32 位有符号整数,将整数中的数字进行反转。 示例 1: 输入:123输出:321 示例 2: 输入:-...

  • 整数反转

    版权声明:本文为博主原创文章,转载请注明出处。个人博客地址:https://yangyuanlin.club欢迎来...

网友评论

      本文标题:leetcode-7. 整数反转

      本文链接:https://www.haomeiwen.com/subject/sfupphtx.html