[路飞]_leetcode_779. 第K个语法符号

168 阅读1分钟

在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。

给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)

解题思路

这一题可以根据递推法来解决

    0
    01
    0110
    01101001

当前行数 N 和序数 K 都可以根据上一行来得出

  1. 当k % 2 === 0 时,当前数是上一行的第 k / 2 个数得来的
    1. 当前字符为 0 时,那么上一行的 第 k / 2 个数为 1
    2. 当前字符为 1 时,那么上一行的 第 k / 2 个数为 0
  2. 当k % 2 !== 0 时,当前数是上一行的第 (k+1) / 2 个数得来的

代码

var kthGrammar = function(n, k) {
    if (n == 1) return 0
    if (n == 2) {
        if (k % 2 === 0) {
            return 1
        } else {
            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)
    }
};