一、 问题本质分析
每次对折都会在原有折痕序列的每对相邻折痕之间插入新的折痕,形成如下规律:
二、算法设计思路
递归建模:将每次折叠视为二叉树的生长
左子树代表新产生的下折痕
右子树代表新产生的上折痕
中序遍历:按照"左-根-右"的顺序访问节点
三、 复杂度分析
时间复杂度:O(2^n) 每个节点访问一次
空间复杂度:O(n) 递归栈深度
四、完整代码
class FoldPaper { public: vector<string> foldPaper(int n) { vector<string> res; if (n < 1) return res; // 边界条件处理 // 模拟折纸过程,实际上是中序遍历二叉树 inOrder(1, n, true, res); // 根节点是下折痕 return res; } // 递归实现的中序遍历 void inOrder(int i, int n, bool isDown, vector<string>& res) { if (i > n) return; // 递归终止条件 inOrder(i + 1, n, true, res); // 遍历左子树(总是下折痕) res.push_bACk(isDown ? "down" : "up"); // 当前节点 inOrder(i + 1, n, false, res); // 遍历右子树(总是上折痕) }};
来源:大矩学习资料
點(diǎn)擊查看更多內(nèi)容
為 TA 點(diǎn)贊
評論
評論
共同學(xué)習(xí),寫下你的評論
評論加載中...
作者其他優(yōu)質(zhì)文章
正在加載中
感謝您的支持,我會繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦