2021-11-04 每日打卡:腾讯精选50题
写在前面
“这些事儿在熟练之后,也许就像喝口水一样平淡,但却能给初学者带来巨大的快乐,我一直觉得,能否始终保持如初学者般的热情、专注,决定了在做某件事时能走多远,能做多好。” 该系列文章由python编写,遵循LeetBook 列表/腾讯的刷题顺序,所有代码已通过。每日3道,随缘剖析,希望风雨无阻,作为勉励自己坚持刷题的记录。
7. 整数反转
class Solution:
def reverse(self, x: int) -> int:
MAX, MIN = 2**31-1, -2**31
flag = 1
if x <0 :
flag =-1
x=-x
newnum = 0
while x:
tmp = x%10
x=x//10
newnum = newnum*10+tmp
return flag*newnum if flag*newnum>MIN and newnum<MAX else 0
9. 回文数
- 映入脑海的第一个想法是将数字转换为字符串,并检查字符串是否为回文。但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串
- 第二个想法是将数字本身反转,然后将反转后的数字与原始数字进行比较,如果它们是相同的,那么这个数字就是回文。但是,如果反转后的数字大于 \text{int.MAX}int.MAX,我们将遇到整数溢出问题。所以我们只反转一半。【第一遍未做出】
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0 or (x!=0 and x%10==0):
return False
elif x == 0:
return True
else:
reverse_x = 0
# 通过比较一半的大小来看是否到了一半,很巧妙!
while x > reverse_x:
last = x % 10
reverse_x = reverse_x * 10 + last
x = x // 10
# 当x为奇数时, 只要满足 reverse_x//10 == x 即可
if reverse_x == x or reverse_x//10 == x:
return True
else:
return False
136. 只出现一次的数字
- 亦或:相同为0,不同为1
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return reduce(lambda x, y: x ^ y, nums)