一、题目描述
[题目地址]
在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)
例子:
输入: N = 1, K = 1
输出: 0
输入: N = 2, K = 1
输出: 0
输入: N = 2, K = 2
输出: 1
输入: N = 4, K = 5
输出: 1
解释:
第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001
注意:
N的范围[1, 30].K的范围[1, 2^(N-1)].
本题读题之后最简单直接的解题思路就是通过题意的这种性质,求得第 n 行的结果,然后返回第 k 个字符即可。
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var kthGrammar = function(n, k) {
if(n === 1) return 0;
if(k%2 === 0){
return kthGrammar(n-1, k/2) === 0 ? 1 : 0;
}else{
return kthGrammar(n-1, Math.floor(k/2)+1);
}
};
此时我们就完成了解题:欢迎讨论