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

880. Decoded String at Index (LeetCode)

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

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

附上我的解决方案,它显示了不同的 O/P 对于这个输入,任何人都可以建议我在 m 解决方案中需要改变什么。提前致谢。

输入 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),您在解析之前减去的地方)。

然而你理解错了问题。它明确指出,如果遇到 digit d,请将磁带重复到该点再 d - 1 次。请注意,不是数字。 IE。 a222 未转换为

repeat('a', 222)

但是

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