[路飞_js算法:第K个语法符号]

111 阅读1分钟

第K个语法符号

问题描述: 在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为011替换为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
   }
};