题解779: 第K个语法符号
在第一行我们写上一个
0
。接下来的每一行,将前一行中的0
替换为01
,1
替换为10
。给定行数
N
和序数K
,返回第N
行中第K
个字符。(K
从1开始)
示例:
输入: N = 1, K = 1
输出: 0
输入: N = 4, K = 5
输出: 1
解释:
第一行: 0
第二行: 01
第三行: 0110
第四行: 01101001
题意解读:
- 本题的题意相对来说还是相对比较好于理解的,给定一个N行数和一个K第几个字符,且遵循一个变换规则,下一行将上一行的0替换为01、1替换为10
- 循环=》判断=》替换=》遍历
代码搞起:
//数据过大时提示超时!!!
var kthGrammar = function(n, k) {
let temp = "0"
let str = "";
//需不需要对k进行判断,和n所对应的字符个数进行比较?
if(n === 1 ){
return 0;
}else{
for(let i = 0;i<n-1;i++){
for(let code of temp){
if(parseInt(code) === 0){
str+="01"
}else if(parseInt(code) === 1){
str+="10"
}
}
temp = str;
str = "";
}
return parseInt(temp[k-1])
}
};
//借鉴评论区的代码!!未作详细解读
var kthGrammar = function(N, K) {
//在进行0,1替换的过程中,存在一定的规律,可对k值进行辨析来较快的获取所对的数0或者1
if (K === 1) {
return '0'
}
if (K === 2) {
return '1'
}
let value = K % 2 === 0 ? kthGrammar(N - 1, K / 2) : kthGrammar(N - 1, (K + 1) / 2)
if (value === '0') {
return K % 2 === 0 ? '1' : '0'
}
return K % 2 === 0 ? '0' : '1'
};
①通过循环=》判断=》替换=》遍历此步骤肯定能够行的通,但是内存消耗较大;②通过数学问题来进行解答,能够有较优解
👆 👆 以上就是个人对【第K个语法符号】的代码解法和方法解读。
所思即所想,思路即套路,一键三连哟!!!