未经博主同意,禁止瞎JB转载。
LeetCode7反转整数
https://leetcode-cn.com/articles/reverse-integer/
我的解法:
1 class Solution(object): 2 def reverse(self, x): 3 """ 4 :type x: int 5 :rtype: int 6 """ 7 flag = 1 8 if x < 0: 9 flag = -1 10 x = abs(x) 11 ret = [] 12 while x/10: 13 ret.append(x%10) 14 x = x/10 15 ret.append(x) 16 retnumber = 0 17 while len(ret) and ret[0] == 0: 18 ret.pop(0) 19 n = len(ret) 20 multip = 1 21 for i in range(n): 22 retnumber = retnumber + ret[n-i-1]*multip 23 multip = multip * 10 24 return retnumber*flag if retnumber*flag>=-2**31 and retnumber*flag<=2**31-1 else 0
这种解法虽然能pass测试,但是错的,因为这是先进行数值计算然后进行判别,但是题目的意思是在整个计算当中数值都不可以溢出。注意,现在网络上基于python对本题目的解都存在这种问题。
正确解法:
class Solution(object): def reverse(self, x): """ :type x: int :rtype: int """ INT_MAX = 2**31 - 1 INT_MIN = -2**31 rev = 0 while (x != 0): pop = x - int(float(x)/10)*10 x = int(float(x)/10) if (rev > INT_MAX/10 or (rev == INT_MAX / 10 and pop > 7)): return 0 if (rev < int(float(INT_MIN)/10) or (rev == int(float(INT_MIN)/10) and pop < -8)): return 0 rev = rev * 10 + pop return rev
参考链接:
https://leetcode-cn.com/problems/reverse-integer/solution/
https://segmentfault.com/a/1190000003912449
特别要注意的是,C/C++/Java是向零取整,而python向下取整。
若想用python实现向零取整,则有 a/b = int(float(a)/b);与此对应的求余为 a%b = a - int(float(a)/b)*b。
LeetCode8回文数:
https://leetcode.com/problems/palindrome-number/description/
不知道为啥中文的网站今天挂掉了。
我的解法:
(转化为字符串)
1 class Solution(object): 2 def isPalindrome(self, x): 3 """ 4 :type x: int 5 :rtype: bool 6 """ 7 numlist = list(str(x)) 8 n = len(numlist)/2 9 for i in range(n): 10 if numlist[i] != numlist[-i-1]: 11 return False 12 return True