算法题 22 折纸问题 (牛客网,今日头条)

链接:https://www.nowcoder.com/questionTerminal/430180b66a7547e1963b69b1d0efbd3c
来源:牛客网

请把纸条竖着放在桌⼦上,然后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。

给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".

测试样例:
1
返回:["down"]

解题思路:实现先后再中,最后左的中序遍历即可得到所有折痕的打印顺序。(特殊的中序遍历)

解题代码:

# -*- coding:utf-8 -*-

class FoldPaper:
    def foldPaper(self, n):
        # write code here
        res=[]
        def inOrder(n,pos):
            if n<=0:
                return
            inOrder(n-1,'order')
            if pos=='order':
                res.append('down')
            else:
                res.append('up')
            inOrder(n-1,'re_order')
        inOrder(n,'order')
        return res




if __name__=="__main__":
    print(FoldPaper().foldPaper(3))
    print(FoldPaper().foldPaper(2))
    print(FoldPaper().foldPaper(1))
    print(FoldPaper().foldPaper(0))

 

posted @ 2018-08-30 13:02  Fintech带你飞  阅读(1210)  评论(0编辑  收藏  举报