题解 | #反转数字#

反转数字

http://www.nowcoder.com/practice/1a3de8b83d12437aa05694b90e02f47a

NC57 反转数字

描述 给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果

1.只反转数字部分,符号位部分不反转

2.反转后整数num超过 32 位的有符号整数的范围 [−231, 231 − 1] ,返回 0

3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

数据范围: -2^31 <= x <= 2^31-1

思路:通过对10取余,获取个位数,获取的数是结果的高位,原数据每次/10,再%10获取每位的数字。结果result每次*10,获取到的个位数加入到结果result中。这样就将低位转化成高位,高位的数字每次并到低位后面。

我之前一直纠结不能使用long,那么如果result是int类型的,最后result越界了,要怎么处理。要不要在获取每一位的数据的同时记录数字长度,当长度记录到9的时候,如果此时x大于2就返回0,小于2返回result。如果刚好等于2,如果是正数(flag为false),result大于147483647就返回0,如果是负数(flag为True),result则大于147483648返回0,否则返回result。后来看评论,大家好像都将result设置为long来处理。就这样吧,懒得写了。

# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param x int整型 
# @return int整型
#
class Solution:
    def reverse(self , x: int) -> int:
        # write code here
        result = 0
        flag = False
        if x < 0:
            flag = True
            x = -x
        while x != 0:
            k = x % 10
            x = int(x / 10)
            result = result * 10 + k
        if flag:
            result = -result
        if (result > 2147483647) | (result < -2147483648):
            return 0
        else:
            return result
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务