007 整数反转

题目

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

示例 1:

输入: 123
输出: 321

示例 2:

输入: -123
输出: -321

示例 3:

输入: 120
输出: 21

示例 4:

输入: 1534236469
输出: 0

示例 5:

输入: -2147483648
输出: 0

注意:

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


实现

第一种:通过队列的方式

把负数转换为正数,通过“队列”统一处理。

  • 状态:通过
  • 1032 / 1032 个通过测试用例
  • 执行用时: 56 ms, 在所有 C# 提交中击败了 93.28% 的用户
  • 内存消耗: 13.9 MB, 在所有 C# 提交中击败了 13.98% 的用户
public class Solution {
    public int Reverse(int x) {
        if (x == int.MinValue)
            return 0;

        long result = 0;
        int negative = x < 0 ? -1 : 1;
        x = negative * x;

        Queue<int> q = new Queue<int>();
        while (x != 0)
        {
            q.Enqueue(x % 10);
            x = x/10;
        }
            
        while (q.Count != 0)
        {
            result += q.Dequeue()*(long) Math.Pow(10, q.Count);
            if (negative == 1 && result > int.MaxValue)
            {
                result = 0;
                break;
            }
            if (negative == -1 && result*-1 < int.MinValue)
            {
                result = 0;
                break;
            }
        }
        return (int)result*negative;        
    }
}
浙ICP备19012682号