880.索引处的解码字符串(LeetCode)



给出一个编码字符串S。要查找解码后的字符串并将其写入磁带,需要每次读取一个字符,并执行以下步骤:

如果读取的字符是一个字母,则将该字母写入磁带。如果读取的字符是一个数字(例如d),则整个当前磁带总共重复写入d-1次。现在,对于一些编码字符串S和索引K,查找并返回解码字符串中的第K个字母(1个索引)。

附件是我的解决方案,它显示了不同的O/p为这个输入,谁能告诉我什么需要改变我的解决方案。提前谢谢。

输入>decodeAtIndex ("vzpp636m8y", 2920)预期O/p=";z">="p"

var decodeAtIndex = function(S, K) {
let res = '';
let hasNumber = false;
let number = '';
let i = 0;

while((i < S.length)) {
if(S[i] < 10) {
number = number + S[i];
hasNumber = true;
while(S[i + 1] < 10) {
number = number + S[++i];
}
}

if (hasNumber) {
let repeat = res.repeat(parseInt(number - 1));
res = `${res}${repeat}`; 
hasNumber = false;
number = '';
} else {
res = `${res}${S[i]}`;            
}
i++;
}    
return res[K - 1];

};

你的代码很好(除了这个拼写错误parseInt(number - 1),你在解析之前减去)。

然而,你对问题的理解是错误的。如果数字遇到d,重复磁带直到该点另一个d - 1次。注意,不是数字。即a222不转化为

repeat('a', 222)

,

repeat(repeat(repeat('a', 2), 2), 2) = repeat('a', 8)

最新更新