首页 > 试题广场 >

反转数字

[编程题]反转数字
  • 热度指数:61990 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个32位的有符号整数num,将num中的数字部分反转,最后返回反转的结果
1.只反转数字部分,符号位部分不反转
2.反转后整数num超过 32 位的有符号整数的范围 [−231,  231 − 1] ,返回 0
3.假设本题不允许存储 64 位整数(有符号或无符号,即C++不能使用long long ,Java不能使用long等)

数据范围:
-231 <= x <= 231-1
示例1

输入

12

输出

21
示例2

输入

-123

输出

-321
示例3

输入

10

输出

1
示例4

输入

1147483649

输出

0

python解法:
1. 把数字x转为字符串数组
"{:d}".format(x)
2. 再 [::-1] 实现 数组反转:如果数字X是负数,反转后的数组最后一位是负号,所以返回时revers[:-1] 不取最后一位;
3. 完整代码如下:
def reverse(x ):
    reverse = "{:d}".format(x)[:: -1]
    return int("-" + reverse[:-1]) if reverse.endswith("-") else int(reverse)




编辑于 2021-06-08 10:59:44 回复(0)
思路一:可以将数字转化为字符串,进行和字符串类似的操作,对于越界行为,由于py3不需要进行越界判断,所以可以采用绝对值对比来进行例外捕捉
class Solution:
    def reverse(self , x ):
        # write code here
        max32 = pow(2,31)
        min32 = -pow(2,31)-1
        
        if(x>=0):
            str_x = str(x)[::-1]
            reversed_x = int(str_x)
            if reversed_x >= max32:
                return 0
            else :
                return reversed_x
        if(x<0):
            str_x = str(abs(x))[::-1]
            reversed_x = int(str_x)
            if reversed_x > max32:
                return 0
            else :
                return -reversed_x     

总结,在编程时遇到了粗心导致的bug,在进行if(x<=0)判定时,对数字进行了截取操作,导致x为0时,出现了“invalid literal for int() with base 10: ''”的错误,
 百度后发现是int()中不能有除数字外的其他符号,而为0时此处为空字符,所以触犯了这个bug,将x==0的判定转移到if(x>0)中便消除了这个bug
发表于 2021-05-10 10:06:02 回复(0)
class Solution:
    def reverse(self , x ):
        if x >= 0:
            return int(str(x)[::-1])
        elif 0 < x < 2 ** 31:
            return 0
        else:
            return int('-' + str(x)[1:][::-1])

发表于 2021-05-05 21:42:37 回复(0)
class Solution:
    def reverse(self , x ):
        # write code here
        if x == (-2)**32:
            return x
        else:
            x_str = str(x)
            if x_str[0] == '-':
                # 如果为负数,则截取负号之后的字符,并反转
                x_str = x_str[0] + x_str[1:][::-1]
            else:
                x_str = x_str[::-1]
            print(x_str)
            return int(x_str)
发表于 2021-04-24 16:15:28 回复(0)
Python
实际上Python3之后,int类型已是无界类型,一旦int溢出情况出现则会转成long类型
所以Python3可以不用做任何边界判断
#
# 
# @param x int整型 
# @return int整型
#
import sys
class Solution:
    def reverse(self , x ):
        # 判断值是否越界,对于Python3可不做此操作
#        if x > sys.maxsize&nbs***bsp;x < -sys.maxsize -1:
#            return 0
        res = 0
        num = abs(x)
        while num:
            res = res*10 + num%10
            num = int(num/10)
        if x>0:
            return res
        else:
            return -res


发表于 2021-04-22 15:27:40 回复(0)
#

# @param x int整型 
# @return int整型
# 使用栈来进行求解
class Solution:
    def reverse(self , x ):
        # write code here
        if x >= 0:
            S = Stack()
            x = str(x)
            for i in x:
                S.push(i)
            tmp = str()
            for i in range(len(x)):
                tmp = tmp + S.pop()
            tmp = int(tmp)
            if tmp > 2e31 - 1:
                return 0
            else:
                return int(tmp)
        else:
            x = str(abs(x))
            S = Stack()
            for i in x:
                S.push(i)
            tmp = str()
            for i in range(len(x)):
                tmp = tmp + S.pop()
            tmp = "-" + tmp
            tmp = int(tmp)
            if tmp <  -2e31:
                return 0
            else:
                return tmp
class Stack:
    def __init__(self):
        self.items = []
    
    def push(self,item):
        self.items.append(item)
        
    def pop(self):
        return self.items.pop(len(self.items)-1)
发表于 2021-03-10 22:39:10 回复(0)
#

# @param x int整型 
# @return int整型
#
class Solution:
    def reverse(self , x ):
        
        return int(str(x)[::-1]) if '-' not in str(x) else int(str(x)[0]+str(x)[::-1][:-1])
发表于 2020-09-25 15:14:06 回复(0)
class Solution:
    def reverse(self , x ):
        # write code here
        if x < 0:
            return -int(str(-x)[::-1].lstrip('0'))
        elif x > 0:
            return int(str(x)[::-1].lstrip('0'))
        else:
            return 0;
不懂处理溢出,py偷懒了
发表于 2020-09-06 01:58:09 回复(0)
class Solution:
    def reverse(self , x ):
        # write code here
        return min(max(int(str(x)[::-1]) if x>=0 else -1 * int(str(x)[::-1][:-1]),-2**32),2**32-1)

发表于 2020-07-31 18:36:57 回复(0)
python解法
class Solution:
    def reverse(self , x ):
        # write code here
        
        flag = False
        if x == 0&nbs***bsp;x == -0:
            return x
        if x < 0:
            x = -x
            flag = True
        x = str(x)
        
        
        reverse_x = ""
        for i in range(len(x)):
            if reverse_x == "" and x[len(x)-i-1] == "0":
                continue
            reverse_x += x[len(x)-i-1]
        reverse_x = int(reverse_x)
        if flag:
            reverse_x = -reverse_x
        return reverse_x


发表于 2020-06-10 19:36:49 回复(0)