给定一个编码字符串 S
。为了找出解码字符串并将其写入磁带,从编码字符串中每次读取一个字符
,并采取以下步骤:
d
),则整个当前磁带总共会被重复写 d-1
次。现在,对于给定的编码字符串 S
和索引 K
,查找并返回解码字符串中的第 K
个字母。
示例 1:
输入:S = "leet2code3", K = 10 输出:"o" 解释: 解码后的字符串为 "leetleetcodeleetleetcodeleetleetcode"。 字符串中的第 10 个字母是 "o"。
示例 2:
输入:S = "ha22", K = 5 输出:"h" 解释: 解码后的字符串为 "hahahaha"。第 5 个字母是 "h"。
示例 3:
输入:S = "a2345678999999999999999", K = 1 输出:"a" 解释: 解码后的字符串为 "a" 重复 8301530446056247680 次。第 1 个字母是 "a"。
提示:
2 <= S.length <= 100
S
只包含小写字母与数字 2
到 9
。S
以字母开头。1 <= K <= 10^9
2^63
个字母。题解:
class Solution { public: string decodeAtIndex(string S, int K) { long N = 0, i; for (i = 0; N < K; ++i) N = isdigit(S[i]) ? N * (S[i] - ‘0‘) : N + 1; while (i--) if (isdigit(S[i])) N /= S[i] - ‘0‘, K %= N; else if (K % N-- == 0) return string(1, S[i]); } };
原文:https://www.cnblogs.com/wangtinglou/p/9425969.html