题目:
我们构建了一个包含 n 行( 索引从 1 开始 )的表。首先在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
例如,对于 n = 3 ,第 1 行是 0 ,第 2 行是 01 ,第3行是 0110 。 给定行数 n 和序数 k,返回第 n 行中第 k 个字符。( k 从索引 1 开始)
来源:力扣(LeetCode) 链接:leetcode.cn/problems/k-… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
根据题意画出前几行
可以看出某个值取决于在其父节点的左或者右,左孩子和父节点相同,右孩子父节点取反,然后我们根据k值算出其父节点的k值,算出n=1时共取了几次反,取反次数为偶数则为0,奇数则为1
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var kthGrammar = function(n, k) {
let a =0
for(let i=n;i>1;i--){
if(k%2!=0){
k=(k+1)/2
}else{
k=k/2
a++
}
}
return a%2===0?0:1
};