leetcode刷题自记录——剑指offer09/10

207 阅读1分钟

题目09 用两个栈实现队列

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 ),难度是easy

思路

一个A栈用来入队,一个B栈用来出队,出队时先判断出队栈B是否为空,若空则将入队栈A的元素出栈并入B栈,在将栈顶元素弹出即可。

代码

class CQueue:
    def __init__(self):
        self.stack_in = []
        self.stack_out = []

    def appendTail(self, value: int) -> None:
        self.stack_in.append(value)

    def deleteHead(self) -> int:
        if not self.stack_out:
            if not self.stack_in: # 都为空
                return -1
            else: # 把in栈中的东西全部倒入out栈中
                while self.stack_in:
                    self.stack_out.append(self.stack_in.pop())
        
        return self.stack_out.pop()

题目10 斐波那契数列1

这题就是实现斐波那契数列,思路就是存放F(N-1)和F(N-2)并不断更新维护,最后返回二者之和,难度是easy

class Solution:
    def fib(self, n: int) -> int:
        if n == 0:
            return 0
        if n == 1:
            return 1

        res = [0,1]
        for i in range(2,n):
            tmp = res[0]
            res[0] = res[1]
            res[1] = res[1] + tmp

        return sum(res)%1000000007#题目中要求进行取模