[LeetCode OJ][007]Reverse Integer

来源:互联网 发布:淘宝联盟数据采集软件 编辑:程序博客网 时间:2024/05/19 01:13

反转一个整数的数字。
Example1: x = 123, return 321
Example2: x = -123, return -321
你想过吗?
开始写代码之前,这里有几个有价值的问题。思考这些问题会为你加分。
如果整数的最后几个数字是0,输出是什么?如,输入10100。
你是否留意了反转的数字是否溢出?假如输入的32位整数是1000000003,反转之后就会溢出。
当溢出发生时,应该保证函数返回0。
更新(2014-11-10):
增加了测试溢出的用例。

我的想法:

  • 方法很简单,就是新数不断乘以10,原数不断除以10,把原数除以10的余数加到新数上。
  • 不用字符串反转来投机取巧的话,最后几个数字是0不影响计算结果。
  • 新数乘以10之后小于-2147483648或大于2147483647,也就是乘以10之前新数小于-214748364或大于214748364。当新数等于这两个数的时候,原数的最高位不会是8或9,这时不会溢出。
  • 用Python不会溢出,其实不用想那么多。但是测试用例要求溢出,所以要在返回之前判断。另外,Python的除法余数是向下取的,所以最好用绝对值算。

C89(6ms):

int reverse(int x){    int answer = 0;    while(x)    {        if(answer < -214748364 || answer > 214748364)        {            return 0;        }        answer = answer * 10 + x % 10;        x /= 10;    }    return answer;}

Python2(58ms):

class Solution:    # @return an integer    def reverse(self, x):        negative = True if x < 0 else False        answer = 0        x = abs(x)        while x:            answer = answer * 10 + x % 10            x = x // 10        if negative:            answer = -answer        if -2147483648 <= answer <= 2147483647:            return answer        else:            return 0
0 0