
LeetCode 779 第K个语法符号
发布日期:2021-05-11 01:24:29
浏览次数:15
分类:精选文章
本文共 1501 字,大约阅读时间需要 5 分钟。
kthGrammar递归问题分析及代码实现
问题描述
题目考察的是一个递归函数kthGrammar(N, K),其中N和K是输入参数。函数的逻辑如下:
基本情况:当N等于1时,返回false。
递归情况:
- 如果K大于2的(N-2)次方,则函数值取反调用自身,即kthGrammar(N, K - 2^(N-2))。
- 如果K小于等于2的(N-2)次方,则函数值与kthGrammar(N-1, K)相同。
解决方案
代码
class Solution {public: int kthGrammar(int N, int K) { if (helper(N, K)) return 1; return 0; } bool helper(int N, int K) { if (N == 1) return false; if (K > pow(2, N - 2)) { return !helper(N, K - pow(2, N - 2)); } else { return helper(N - 1, K); } }};
递归分析
递归条件的简化表述
- 当N=1:返回false。这相当于初始情况,没有进一步递归可能。
- 当K > 2^(N-2):函数调用自身,但K减去2^(N-2)。这里的操作可以理解为每次减少一个与N有关的固定值。
- 当K ≤ 2^(N-2):递归进入N-1层,保持K不变。
递推关系式
通过递推关系式可以更清晰地看到函数的行为:
- f(N, K) = !f(N, K - 2^(N-2)),当K > 2^(N-2)
- f(N, K) = f(N-1, K),当K ≤ 2^(N-2)
这一递推关系表明,当K超过某一阈值时,函数值会反转,并在每一步递减一个固定的2^(N-2),而若K未超过阈值,则继续递归到上层的N-1。
实现代码解读
kthGrammar函数:这个函数调用了一个内部的helper函数,并根据返回结果返回1或0。
helper函数:
- 基本情况:当N=1时,返回false。
- 递归判断:
- 如果K > 2^(N-2),则再次调用helper,调整K值,并取反返回。
- 否则,递归到helper(N-1, K)。
代码关键点
- 递归终止条件:N=1,返回false。
- 状态判断:根据K的大小决定是继续递归还是取反返回。
- 递推规则:每次递减的K值是依赖于N的,这使得函数具有递归跳跃性。
递归优化思路
为了避免重复计算,可以考虑缓存中间结果或使用记忆化技巧。例如,可以用一个数组或者哈希表记录已经计算过的(N, K)组合,以减少重复计算。但在本题中,递归的终止条件足够佳,而且递推方式不会导致过深的递归栈,因此优化可能已经足够。
测试与验证
为了验证递归的正确性,可以设计以下测试案例:
测试案例1:
- N=1,K=1
- 预期结果:false
- 实现结果:随着N=1返回false,函数值为0。
测试案例2:
N=2,K=2:此时N=2,2^(2-2)=1,K=2>1,递归到helper(2,1)
- helper(2,1)=helper(2,1-1=0) ??此处K=0是否合理?
可能需要重新测试。
更全面测试:需要找出N和K的不同情况,逐一验证函数的行为。
总结
该递归函数通过递减K的固定步长,并根据N递减进行状态转换,最终得出结果。它的逻辑清晰,适用于解决特定范围内的递归问题。
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年05月10日 15时33分06秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(原创)面向对象的系统对接接口编写。第5篇(完结)
2023-01-24
2024网络安全岗就业前景如何?零基础入门到精通,收藏这篇就够了
2023-01-24
2024零基础如何入门网络安全?
2023-01-24
2024,java开发,已经炸了吗?
2023-01-24
2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这一篇就够了
2023-01-24
2025入门黑客技术必读书籍(非常全面)带你从小白进阶大佬!收藏这篇就够了
2023-01-24
2025大语言模型入门该怎么学?零基础入门到精通,收藏这篇就够了
2023-01-24
2025年3月全国计算等级考试(报名操作指南)从零基础到精通,收藏这篇就够了!
2023-01-24
2025年中国云计算市场四大趋势前瞻,从零基础到精通,收藏这篇就够了!
2023-01-24
.off打开方式、文件格式和使用代码(Python示例)
2023-01-24
2025年十大最佳漏洞管理工具,从零基础到精通,收藏这篇就够了!
2023-01-24
2025年网络安全五大趋势与十大威胁预测,从零基础到精通,收藏这篇就够了!
2023-01-25
2025想做黑客?先来学习 SQL 注入,零基础入门到精通,收藏这篇就够了
2023-01-25
2025春招计算机就业哪些方向最香?零基础入门到精通,收藏这篇就够了
2023-01-25
2025最全版《安全技术交底》.docx。从零基础到精通,收藏这篇就够了!
2023-01-25
2025最新大模型技术学习过程梳理,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版万字长文入门大语言模型(LLM)零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新0基础怎么转行网络安全?零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新Bash Shell入门指南,零基础入门到精通,收藏这篇就够了
2023-01-25
2025版最新C++快速入门(适合小白)零基础入门到精通,收藏这篇就够了
2023-01-25