首页 > 代码库 > 折纸运算

折纸运算

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

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

测试样例:
1
返回:["down"]
 1 package com.offer;
 2 import java.util.*;
 3 public class FoldPaper {
 4 
 5     public static void main(String[] args) {
 6         foldPaper(3);
 7 
 8     }
 9     public static String[] foldPaper(int n) {
10           if(n<=0)
11               return null;
12             ArrayList<String> arr=new ArrayList<String>();
13             
14             getFolder(n,1,arr,true);//先右,后中 最后左顺序
15             String[] res=new String[arr.size()];
16             for(int i=0;i<arr.size();i++)
17             {
18                 res[i]=arr.get(i);
19                 System.out.print(res[i]+" ");
20             }
21             return res;
22             
23         }
24         public static void getFolder(int n,int i,ArrayList<String> str,boolean down)
25         {//类似于中序遍历,先遍历右边,在遍历中间,最后遍历左子树
26             if(i>n)
27                 return;
28             getFolder(n,i+1,str,true);//getFolder(n,i+1,str,root.right)
29             if(down)
30                 str.add("down");
31             else
32                 str.add("up");
33             getFolder(n,i+1,str,false);
34         }
35 }

 

折纸运算