美文网首页
ZOJ1004递归实现堆栈

ZOJ1004递归实现堆栈

作者: Jiafu | 来源:发表于2017-09-29 14:02 被阅读0次
import sys

 
stack = []

operate = []

str_a = ''

str_b = ''

 
def dfs(index_a, index_b):

    if index_a == len(str_a) and index_b == len(str_b):

        for oper in operate:

            sys.stdout.write(oper)

            sys.stdout.write(' ')

        sys.stdout.write('\n')    
        return

    if index_a < len(str_a):

        stack.append(str_a[index_a])

        operate.append('i')

        dfs(index_a   1, index_b)

        stack.pop()

        operate.pop()

    if len(stack) > 0 and stack[-1] == str_b[index_b]:

        str_pop = stack.pop()

        operate.append('o')

        dfs(index_a, index_b   1)

        stack.append(str_pop)

        operate.pop()

if __name__ == '__main__':

    i = 0

    is_first = True

    for line in sys.stdin:

        line = line.split('\n')[0]

        if i == 0:

            str_a = line

        else:

            str_b = line

            if is_first:

                print '['

                is_first = False

            else:

                print '\n['

            if len(str_a) == len(str_b):

                stack = []

                operate = []

                dfs(0, 0)

            sys.stdout.write(']')

        i = (i   1) % 2

整体思想就是用递归来模拟栈操作,深度优先。需要注意格式的问题,最后一个“]”之后没有回车,另外每行输出之后都有个空格。

相关文章

  • ZOJ1004递归实现堆栈

    整体思想就是用递归来模拟栈操作,深度优先。需要注意格式的问题,最后一个“]”之后没有回车,另外每行输出之后都有个空格。

  • [JS]二分法查找两种实现

    利用递归去实现,要注意终止临界条件,否则会发生堆栈内存溢出的情况。 递归版本: 理论上任何递归可以解决的事情都可以...

  • python中设定递归深度

    python中设定递归深度 递归调用中如果出现无限递归或过多的堆栈层级(占用大量的内存)会导致堆栈溢出。在默认的情...

  • 斐波那契数列,尾递归

    定义: 实现: 缺点:在一个算法中,如果递归函数调用过多次数,那么就会导致堆栈溢出。 解决方法:尾递归--不会发生...

  • JS实现归并排序

    递归的内存堆栈分析 一直对递归理解不深,原因是递归的过程很抽象,分析不清内存堆栈的返回过程。偶然google到一篇...

  • 递归(recursion)

    基线条件(base case)&递归条件(recursive case) 递归条件基线条件 堆栈 调用栈 递归调用栈

  • 递归

    文章结构 递归是什么 递归需要满足的三个条件 如何编写递归代码 递归代码要警惕堆栈溢出 递归代码要警惕重复计算 怎...

  • 递归

    递归即自己调用自己注意在使用递归时需要定义递归头和递归体 需要注意的是,虽然递归简单,但是会占用大量的系统堆栈,内...

  • 数据结构-树的遍历

    1. 先序遍历 递归实现 非递归实现 2. 中序遍历 递归实现 非递归实现 3. 后序遍历 递归实现 非递归实现 ...

  • 基础练习——归并排序(非递归思考)

    典型的分治,由于是平均分,所以时间复杂度是O(n²)。 递归 非递归1 但这个非递归版本只是使用堆栈代替递归,好繁...

网友评论

      本文标题:ZOJ1004递归实现堆栈

      本文链接:https://www.haomeiwen.com/subject/mrsiextx.html