[路飞]_leetcode-779-第K个语法符号

115 阅读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

注意:

  1. N 的范围 [1, 30].
  2. K 的范围 [1, 2^(N-1)].

本题读题之后最简单直接的解题思路就是通过题意的这种性质,求得第 n 行的结果,然后返回第 k 个字符即可。

image.png

/**
 * @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);
    }
};

image.png

此时我们就完成了解题:欢迎讨论