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 = 3
Wenn , sind alle Anordnungen wie folgt:
"123"
"132"
"213"
"231"
"312"
"321"
Gegeben n
und k
geben k
die 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.