赞
踩
请把一段纸条竖着放在桌子上,然后从纸条的下边向上方对折1次,压出折痕后展开。此时折痕是凹下去的(下折痕),即折痕突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。
给定一个输入参数N,代表纸条从下边向上方连续对折N次。请从上到下打印所有折痕的方向。
例如:
N=1时,打印: down(凹、下);
N=2时,打印: down(凹、下)、down(凹、下)、up(凸、上)
可以看出:
class Solution{
void process(int i, int N, bool down){
if(i > N){
return;
}
process(i + 1, N, true);
printf("%s\t", down ? "down" : "up");
process(i + 1, N, false);
}
public:
void printfFolds(int N){
process(1, N, true);
}
};
纸条连续对折 n n n次之后一定产生 2 n − 1 2^{n-1} 2n−1条折痕,所以要打印所有的节点,不管用什么方法,时间复杂度一定是 2 n 2^{n} 2n,
上面方法的空间复杂度为O(n),为这颗满二叉树的高度,额外空间主要用来维护递归函数的运行
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。