Я пытаюсь решить вопрос на LeetCode.com :
Дана закодированная строка S. Чтобы найти и записать декодированную строку на ленту, закодированная строка считывается по одному символу за раз, и предпринимаются следующие шаги:
- Если прочитанный символ является буквой, эта буква записывается на лента.
- Если прочитанный символ представляет собой ди git (скажем, d), вся текущая лента будет записана повторно в общей сложности d-1 раз.
Теперь для некоторая закодированная строка S и индекс K находят и возвращают K-ую букву (1 индексированная) в декодированной строке.
Наиболее решение с поддержкой голосования выглядит следующим образом:
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; // what's the intuition for this
else if (K % N-- == 0) // and this?
return string(1, S[i]);
return "lee215";
}
Пока я выполнял dry -обработку кода с помощью ручки и бумаги, я не уверен, что полностью понимаю интуицию за комментариями.
Как это работает?