给出一个编码字符串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)