【LeetCode】Palindrome Number - 使用双向队列(deque) 解决“回文数”问题

使用双向队列(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:
leetcode_submissions_9. Palindrome Number.png



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 版测试报告参考:
n/a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值