1.code
class Solution {
public int kthGrammar(int N, int K) {
if(N==1)return 0;
return (~K & 1)^kthGrammar(N-1,(K+1)/2);
}
}
2.题解分析
第一行 0
第二行 01
第三行 0110
第四行 01101001
可以总结规律,某一行的第 K 个数字是上一行第 (K+1) / 2 个数字生成的。如果上一行的数字为 0,被生成的数字为 1 - (K%2),如果上一行的数字为 1,被生成的数字为 K%2。
参考资源:leetcode官方题解。
本文提供了一种使用递归算法解决LeetCode题目中N阶语法第K个字符的方法。通过观察每阶语法的生成规律,我们发现每一阶的第K个字符都是由上一阶的特定位置的字符决定的。具体而言,如果上一阶的数字为0,被生成的数字为1-(K%2),如果上一阶的数字为1,被生成的数字为K%2。此方法大大简化了问题的复杂度。

被折叠的 条评论
为什么被折叠?



