Почему удаление «else» без изменения logi c сократило мое время выполнения пополам? - PullRequest
3 голосов
/ 20 января 2020

После решения этой проблемы на LeetCode: https://leetcode.com/problems/count-and-say/ мое первое решение заняло 16 мс. Удалив оператор else, без (насколько я могу судить) изменения логики c каким-либо образом, время выполнения сократилось до 8 мс. %.

Кто-нибудь может объяснить, почему? Мне кажется, что они должны быть одинаковыми.

func countAndSay(_ n: Int) -> String {
    if n == 1 {
        return "1"
    }

    var output = ""
    let previous = countAndSay(n-1)

    var count = 0
    var lastChar = Character("0")

    for (n, c) in previous.enumerated() {           
        if n == 0 {
            lastChar = c
            count = 1
        } else {
            if c == lastChar {
                count += 1
            } else {
                output += "\(count)\(lastChar)"
                count = 1
                lastChar = c
            }
        }
    }

    output += "\(count)\(lastChar)"

    return output
}

Я изменил для l oop на это и сократил время пополам:

for (n, c) in previous.enumerated() {
    if n == 0 {
        lastChar = c
        count = 1
        continue
    }

    if c == lastChar {
        count += 1
    } else {
        output += "\(count)\(lastChar)"
        count = 1
        lastChar = c
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...