LeetCode - #60 Permutationssequenz

Machen Sie es sich zur Gewohnheit, gemeinsam zu schreiben! Dies ist der 5. Tag meiner Teilnahme an der „Nuggets Daily New Plan · April Update Challenge“, klicken Sie hier, um die Details der Veranstaltung anzuzeigen .

Vorwort

Unsere Community wird die Swift-Algorithmus-Problemlösungen von Gu Yi ( Netflix Growth Hacker, Autor von „The Way of the iOS Interview“, professioneller ACE-Fitnesscoach. Weibo: @古除道长) sukzessive in einer Textversion organisieren, die jeder lernen kann und lese.

Wir haben bisher 59 Ausgaben des LeetCode-Algorithmus aktualisiert, und wir werden die Aktualisierungszeit und den Fortschritt beibehalten ( veröffentlicht um 9:00 Uhr am Montag, Mittwoch und Freitag ).Es wird eine große Verbesserung geben.

Wenn Sie keinen kleinen Schritt machen, können Sie keine tausend Meilen zurücklegen, wenn Sie keinen kleinen Bach sammeln, können Sie keinen Fluss machen. Die Swift-Community begleitet Sie, um voranzukommen. Wenn Sie Vorschläge und Kommentare haben, hinterlassen Sie bitte eine Nachricht am Ende des Artikels, wir werden unser Bestes tun, um Ihre Bedürfnisse zu erfüllen.

Schwierigkeitsgrad: Schwierig

1. Beschreibung

Ergibt eine Menge [1,2,3,...,n]mit allen Elementen in einer Gesamtzahl n!von Permutationen.

Listen Sie alle Anordnungen der Größenordnung nach auf und markieren Sie sie nacheinander. n = 3Wenn , sind alle Anordnungen wie folgt:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

Gegeben nund kgeben kdie Permutation zurück.

2. Beispiel

Beispiel 1

输入:n = 3, k = 3
输出:"213"
复制代码

Beispiel 2

输入:n = 4, k = 9
输出:"2314"
复制代码

Beispiel 3

输入:n = 3, k = 1
输出:"123"
复制代码

Einschränkungen:

  • 1 <= n <= 9
  • 1 <= k <= n!

3. Antworten

class PermutationSequence {
    func getPermutation(_ n: Int, _ k: Int) -> String {
        var numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]

        var factorial = 1
        for i in 1 ..< n {
            factorial *= i
        }

        var result = ""
        var k = k
        var divisor = n - 1

        for i in 0 ..< n {
            for (index, number) in numbers.enumerated() {
                if k > factorial {
                    k -= factorial
                } else {
                    result += "\(number)"
                    numbers.remove(at: index)
                    break
                }
            }
            if divisor > 1 {
                factorial /= divisor
                divisor -= 1
            }
        }

        return result
    }
}
复制代码
  • Hauptidee: Iterieren und ändern Sie das Array vom letzten zum ersten.
  • Zeitkomplexität: O(n^2)
  • Raumkomplexität: O(1)

Repository für die Algorithmuslösung: LeetCode-Swift

Klicken Sie hier, um zur LeetCode- Praxis zu gelangen

über uns

Wir werden gemeinsam von Swift-Enthusiasten gepflegt. Wir werden die technischen Inhalte rund um Swift Combat, SwiftUI und Swift Foundation teilen und auch hervorragende Lernmaterialien organisieren und sammeln.

Ich denke du magst

Origin juejin.im/post/7084180290092367902
Empfohlen
Rangfolge