题目

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

示例 1:

输入: 123
输出: 321


 示例 2:

输入: -123
输出: -321

 


解题

 解法一、转换字符串 && 反转字符串
这里只需要判断边界(是否溢出,负数符号)
public int Reverse(int x)
{
    var flag = x < 0 ? -1 : 1;

    var str = x.ToString();
    var ans = default(long);
    if (flag > 0)
    {
            ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray()));

        if (ans > int.MaxValue) return 0;
    }
    else
    {
        str = str.Substring(1);
        ans = long.Parse(new String(str.ToCharArray().Reverse().ToArray()));
        if ((ans - int.MaxValue) > 1) return 0;
    }

    return (int)ans * flag;
}
View Code

 

解法二、数学计算

字符串的操作是比较耗时,而且需要额外的空间

个位 = x % 10;

x减少一位 = x / 10

反转数字  = ans * 10 + 个位

不断循环直至x == 0,只需要判断溢出条件就可以

public int Reverse(int x)
{
    int ans = 0;
    while (x != 0)
    {
        int pop = x % 10;
        x /= 10;

        if (ans > int.MaxValue / 10 || ((ans == int.MaxValue / 10) && pop > 7)) return 0;

        if (ans < int.MinValue / 10 || ((ans == int.MinValue / 10) && pop < -8)) return 0;

        ans = ans * 10 + pop;
    }

    return ans;
}
View Code

 


来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-integer

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/WilsonPan/p/11785277.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!