请把纸条竖着放在桌⼦上,而后从纸条的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫作“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫作“上”折痕。若是每次都从下边向上⽅ 对折,对折N次。请从上到下计算出全部折痕的⽅向。java
给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up".数组
1 返回:["down"]
连接测试
首先我用手头的纸张进行实验,进行对折1,2,3,4次,发现了一些规律。code
package codewars.jul; import java.util.LinkedList; public class FoldPaper { private static String[] next(String[] previous, int fold) { int n = (int) Math.pow(2, fold); String[] rs = new String[n + (n - 1)]; int cur = 0; boolean down = true; for (int i = 0; i < rs.length; i++) { if (i % 2 == 1) { rs[i] = previous[cur++]; } } for (int i = 0; i < rs.length; i++) { if (rs[i] == null) { if (down) { rs[i] = "down"; down = false; } else { rs[i] = "up"; down = true; } } } return rs; } public String[] foldPaper(int n) { if (n < 1) { return new String[0]; } LinkedList<String> list = new LinkedList<String>(); int pieces = 0; int count = 0; if (n == 1) { list.add("down"); pieces = 2; count = 1; return list.toArray(new String[0]); } else { return next(foldPaper(n - 1), n - 1); } } public static void main(String[] args) { FoldPaper obj = new FoldPaper(); String[] arr = obj.foldPaper(4); for (String str : arr) { System.out.print(str + " "); } } }