779. 第K个语法符号

125 阅读1分钟

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


    const help = (n, k )=>{
        if(!n)return 0
        let flag = k %2;
        // return flag? help(n-1, k/2 |0) :Math.abs( help(n-1,k/2 |0)-1)

        return Math.abs( help(n-1,Math.ceil(k/2))-1+flag )

    }

    return help(n, k)

}

function diedai(n,k){
    let map = {0:'01', 1:'10'}
    let dp = [['0']];
    let pre =['0'], temp =[]

  for(let i =1;i<= n ;i++ ){
      temp=[]
      pre.forEach(item => temp.push(...map[item]) )
      pre = temp ;
  }
  return pre[n][k-1]
};