LeetCode:地址
题目要求
在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)
示例 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递归判断,当前行的第K个,如果k为偶数应该看上一行的第k/2个,否则看上一行的k/2+1个,注意js应为Math.floor(k/2)+1。 然后根据上一行的指定结果判断,如果k为偶数,返回相反的数,如果为奇数,返回相同的数。
代码
/**
* @param {number} N
* @param {number} K
* @return {number}
*/
var kthGrammar = function(N, K) {
let res;
if(N===1)return 0;
if(K%2){
res = kthGrammar(N-1,Math.floor(K/2)+1);
}else{
res = kthGrammar(N-1,K/2);
}
if(K%2){
return res;
}else{
return res===0?1:0;
}
};