LeetCode 7.Reverse Integer

Reverse Integer

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

给定一个32位有符号整数,求整数的反转数字。
Example 1:

Input: 123
Output:  321

Example 2:

Input: -123
Output: -321

Example 3:

Input: 120
Output: 21

注意:假设我们正在处理一个只能保持32位有符号整数范围内的整数的环境。出于这个问题的目的,假设你的函数在反向整数溢出时返回0。

个人思路:

将输入的32位有符号整数转换为字符串,然后使用Array.Reverse将字符串进行逆置。考虑到有符号的存在,先判断字符串中的第一个字符是否为“-”号,若是,则截取除“-”外的剩余字符串进行逆置操作;否则,直接将该字符串逆置。由于逆置操作可能会导致32位整数的溢出,故在将字符串转换成整数时使用try-catch语句进行异常的处理。

代码如下:

public int Reverse(int x) 
{
    string str = x.ToString();
    string symbol = str.Substring(0, 1);
    string left = str.Substring(1);
    char[] s;
    if (symbol == "-")
    {
        s = left.ToCharArray();
        Array.Reverse(s);
        string newString = "-" + new string(s);
        try
        {
            return (Convert.ToInt32(newString)) > (Math.Pow(2, 32) - 1) ? 0 : Convert.ToInt32(newString);
        }
        catch (Exception)
        {
            return 0;
        }
    }
    else
    {
        s = str.ToCharArray();
        Array.Reverse(s);
        string newString = new string(s);
        try
        {
            return (Convert.ToInt32(newString)) > (Math.Pow(2, 32) - 1) ? 0 : Convert.ToInt32(newString);
        }
        catch (Exception)
        {
            return 0;
        }
    }
}

大神解答:

public int reverse(int x)
{
    long rev = 0;
    while (x != 0)
    {
        rev = rev * 10 + x % 10;
        x = x / 10;
        if (rev > int.MaxValue || rev < int.MinValue)
            return 0;
    }
    return (int)rev;
}
分析:

首先声明一个long型变量rev,防止后面逆置的过程中产生溢出。整数逆置的思想是:先将整数x对10求余,得到个位数,再将x除以10,即去掉个位数,然后再次对新得到的数进行求余操作,最后用最先得到的余数*10加上第二次的得到而余数,这样就能得到最后两位数字的逆置,以此类推。。。每次将相加得到的和*10加上求余的结果,就可以得到整数的逆置了。

核心代码如下:
rev = rev*10 + x % 10;
x = x/10;

反思:

将整数先转换为字符串,然后再进行一系列的操作,最后又转换成整数。这样做虽然也能得到正确的结果,但无疑会增加运行的时间开销,而且从出题人的角度来看,考察点肯定是直接对整数进行逆置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值