LeetCode7.python实现:整数反转问题☆
目录
问题
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。
示例 1:
[code]输入: 123 输出: 321
示例 2:
[code]输入: -123 输出: -321
示例 3:
[code]输入: 120 输出: 21
注意:
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
解题思路
分析:要将指定的整数进行反转,无疑就是将该整数不断进行对10取余操作 和 对10整除操作。这里要注意一个问题:负数和正数的整除和取余结果的不同。正数的整除和取余,我们耳熟能详,但对于负数,或许会稍有疑惑,比如 -4,整除10等于-1,对10取余等于6。但是,我们希望无论是正数,还是负数,都可以进行同样的操作,而这,并不难实现。
基于此,详细步骤如下:
1)正负数的判断并将负数变为正数。假定指定的整数为X,则先判断X是正数还是负数(注意:此处我们忽略了0),若为负数,则变为正数。因此,需要一个标记,也就是来一个flag变量,默认值我们设定为False,即为正数,当flag为True时,也就表示指定值为负数,这个我们会在第三步中用到;
2)反转数的存储。这里,我用列表来存储反转数。先存储变量对10的取余值(这里,我考虑将反转数的每位数先字符存储,然后拼接成字符串,最后进行类型转换实现整数的输出,因此,在程序实现的的列表添加取余值时,用了str()进行类型转换。当然,也可以直接进行类同反转数的操作,每迭代一次,就进行之前的数乘以10并加上当前取余的值的操作来实现,不过感觉没有直接类型转换程序运行快吧),将变量变为对10整除后的值,直到变量对10整除为0为止;
3)字符串拼接,类型转换。第二步中,我们用字符列表存储了反转的每一位数,因此,现在我们要将反转后的每位数,拼接到一起了,如果flag为True,则在拼接的字符串前面,在拼接上字符'-';
4)题干注意事项的判断,结果返回。这不无须解释,按照题干的注意提醒操作即可,然后返回最终值。
python具体实现
[code]class Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ # 特殊情况一 : 0值的判断,直接输出 if x==0 : return 0 # 一般情况的调整翻转 xlist =[] # 存储反转的数字 flag = False # 默认为正数的标记 if x<0: x = abs(x) flag = True while x>0: xlist.append(str(x%10)) # 顺序存储每位反转数,注意字符形格式 x = x//10 # 整除操作 result = None # 将xlist中的字符,顺序拼接 if flag: result = '-'+''.join(xlist) else: result = ''.join(xlist) result = int(result) # 将反转的数字字符串格式转换 # 特殊情况二:反转后的溢出判断 if result >2**31-1 or result<-2**31: return 0 else: return result
题外话
这道题是LeetCode中标记为简单的题目,但我还是提交错了三次,第一次是忽略了0值本身的反转输出;第二次是程序填了0值判断,代码进行调整后,忽视所致的错误;第三次就是注意事项的忽视所致。第四次正确提交。如下的两张图,为同一代码两次的执行结果图,可以发现,系统运行的快慢其实也是一个随机事件(并非随机哈),但不管怎样,精益求精,设计更快捷高效的算法,才是正途。
- LeetCode344.python实现: 反转字符串问题☆
- LeetCode557.python实现: 反转字符串中的单词 III问题☆
- python实现leetcode-第七题-整数反转
- leetcode的python实现 刷题笔记7: 反转整数
- LeetCode里的7.反转整数问题 Java15行
- LeetCode11.python实现: 盛最多水的容器问题☆☆
- leetcode的python实现 刷题笔记13: 罗马数字转整数
- LeetCode9.python实现: 回文数问题☆
- LeetCode16. python实现:最接近的三数之和问题☆☆
- leetcode 2. Add Two Numbers python实现的理解,结点,单链表的应用,大数,进位的问题
- LeetCode14. python实现:最长公共前缀问题☆
- LeetCode--Reverse Integer(整数反转)Python
- LeetCode169.python实现: 求众数问题☆
- LeetCode215. python实现:数组中的第K个最大元素问题☆☆
- [leetcode 7] Reverse Integer(整数反转) c函数实现
- 0-1背包问题+Leetcode[132] python实现
- LeetCode26. python实现:删除排序数组中的重复项问题☆
- LeetCode292.Python实现: Nim游戏问题☆
- LeetCode33.python实现: 搜索旋转排序数组问题☆☆
- 编程集训第2天:LeetCode--环形链表2(142)及单链表反转(206)C++和python代码实现