使用双向队列(deque) 解决“回文数”
Desc: n/a
2020/06/11 更新
时隔一年,多做了几题 leetcode,多了解了几个 python 标准库的东西。
发现 python 标准库提供了 deque 的实现(collections.deque
)
所以更新了一下这个问题的代码:
class Solution:
def isPalindrome(self, x: int) -> bool:
if x < 0:
return False
elif x == 0:
return True
from collections import deque
src = deque(str(x))
for _ in range(len(src) // 2):
if src.popleft() != src.pop():
return False
return True
这个实现虽然不是最快的,但是很简洁,而且速度相比于下文自己通过 list
等实现 duque 要快。
Submission:
2019/04/22 原文:
deque 使用 python 列表实现。
简要版(隐式使用deque ‘方法’)
class Solution:
def isPalindrome(self, x: 'int') -> 'bool':
src = str(x)
try:
int(src[0])
except IndexError:
return True
except ValueError:
return False
dst = [_ for _ in src]
while True:
try:
start = dst.pop(0)
end = dst.pop()
if start == end:
continue
else:
return False
except:
return True
完全 deque 版
class Solution:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def addRear(self, item):
self.items.insert(0, item)
def addFront(self, item):
self.items.append(item)
def removeFront(self):
return self.items.pop()
def removeRear(self):
return self.items.pop(0)
def size(self):
return len(self.items)
def isPalindrome(self, x: 'int') -> 'bool':
src = str(x)
try:
int(src[0])
except IndexError:
return True
except ValueError:
return False
[self.addFront(_) for _ in src]
while True:
try:
s = self.removeRear()
e = self.removeFront()
if s == e:
continue
else:
return False
except:
return True
完全 deque 版测试报告参考: