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