在第一行我们写上一个 0。接下来的每一行,将前一行中的0替换为01,1替换为10。
给定行数 N 和序数 K,返回第 N 行中第 K个字符。(K从1开始)
解题思路
这一题可以根据递推法来解决
0
01
0110
01101001
当前行数 N 和序数 K 都可以根据上一行来得出
- 当k % 2 === 0 时,当前数是上一行的第 k / 2 个数得来的
- 当前字符为 0 时,那么上一行的 第 k / 2 个数为 1
- 当前字符为 1 时,那么上一行的 第 k / 2 个数为 0
- 当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)
}
};