算法题 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))