Зачем здесь вычислять остатки? - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь решить вопрос на 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 -обработку кода с помощью ручки и бумаги, я не уверен, что полностью понимаю интуицию за комментариями.

Как это работает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...