解题思路
子节点的 k 值如果是奇数,那么它的值和父节点的值是相同的,反之,它的值和父节点的值是相反的
有了以上两个规律的总结,我们思考这样一个过程,从最底层节点向上查找,直到 k = 1,此时,当前节点就是所在行的最最左侧,而所有 k = 1 的节点的值都是 0
那么我们从目标节点,向上回溯,回溯过程中记录 flag 为它和父节点之间的关系
最后回溯到 k = 1 的节点的时候,因为该节点值肯定为 0,则可以根据此时 flag 的状态推导目标节点的值
如果 flag = true,则目标节点和该节点值相同,返回 0,否则返回 1
var kthGrammar = function(n, k) {
// 初始化 flag
let flag = true;
// 当 k != 1的时候
while(k>1){
// 判断当前 k 值奇偶,更新 flag
if(!(k%2)) flag = !flag;
// 向上更新 k
k = Math.ceil(k/2);
}
// 根据 flag 结果推导目标字符的值
if(flag) return 0;
return 1;
};