第K个语法符号
问题描述: 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)(by leetcode 779)
例子:
输入: N = 1, K = 1
输出: 0
输入: N = 2, K = 1
输出: 0
输入: N = 2, K = 2
输出: 1
输入: N = 4, K = 5
输出: 1
解释:
第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001
思路: 如果暴力求解,不难看出,每行会有2n次方位,很快就超出系统能处理的位数了。根据题目,不难找到规律,本行第K项是由上一行那个值生成。 求出上一行的值,如果上一行是0,那么本行该项是1-k%2,如果上一行是1,那么本行是k%2.
/**
* @param {number} n
* @param {number} k
* @return {number}
*/
var kthGrammar = function(n, k) {
if (n == 1) return 0;
let last=kthGrammar(n-1,Math.floor((k+1)/2));
if(last==0){
return 1-k%2;
}else
{
return k%2
}
};