. Finden Sie das nächstgelegene Palindrom

PHPz
Freigeben: 2024-08-25 06:37:02
Original
937 Leute haben es durchsucht

. Find the Closest Palindrome

564. Finden Sie das nächstgelegene Palindrom

Schwierigkeit:Schwer

Themen:Mathematik, String

Gegeben ist eine Zeichenfolge n, die eine Ganzzahl darstellt. Geben Sie die nächstgelegene Ganzzahl (ohne sich selbst) zurück, bei der es sich um ein Palindrom handelt. Wenn es einen Gleichstand gibt, geben Sieden kleineren zurück.

Der nächste Wert ist definiert als die minimale absolute Differenz zwischen zwei ganzen Zahlen.

Beispiel 1:

  • Eingabe:n = „123“
  • Ausgabe:„121“

Beispiel 2:

  • Eingabe:n = „1“
  • Ausgabe:„0“
  • Erklärung:0 und 2 sind die nächstgelegenen Palindrome, aber wir geben das kleinste zurück, nämlich 0,

Einschränkungen:

  • 1 <= n.Länge <= 18
  • n besteht nur aus Ziffern.
  • n hat keine führenden Nullen.
  • n stellt eine ganze Zahl im Bereich [1, 1018- 1] dar.

Hinweis:

  1. Wird rohe Gewalt dieses Problem lösen? Denken Sie an etwas anderes.
  2. Nehmen Sie einige Beispiele wie 1234, 999,1000 usw. und überprüfen Sie die nächsten Palindrome. Wie viele verschiedene Fälle sind möglich?
  3. Müssen wir nur die linke oder rechte Hälfte der Saite oder beides berücksichtigen?
  4. Versuchen Sie, das nächstgelegene Palindrom dieser Zahlen zu finden – 12932, 99800, 12120. Haben Sie etwas beobachtet?

Lösung:

Wir konzentrieren uns auf die Erstellung einer Funktion, die potenzielle Palindrom-Kandidaten generiert und dann denjenigen auswählt, der der Eingabezahl am nächsten kommt.

Lösungsansatz:

  1. Palindrome-Kandidaten identifizieren:

    • Spiegeln Sie die erste Hälfte der Zahl, um ein Palindrom zu bilden.
    • Betrachten Sie Randfälle, bei denen alle Ziffern 9, 100...001 oder 99...99 sind.
    • Generieren Sie Palindrome, indem Sie die Mitte der Zahl um 1 nach oben oder unten ändern.
  2. Berechnen Sie das nächstgelegene Palindrom:

    • Berechnen Sie für jeden Palindrom-Kandidaten die absolute Differenz zur ursprünglichen Zahl.
    • Gib das Palindrom mit dem kleinsten Unterschied zurück. Bei Gleichstand geben Sie das kleinere Palindrom zurück.

Lassen Sie uns diese Lösung in PHP implementieren:564. Finden Sie das nächstgelegene Palindrom

 

Erläuterung:

  • generatePalindrome($firstHalf, $isOddLength):
    • Diese Hilfsfunktion erstellt ein Palindrom, indem sie die erste Hälfte der Zahl spiegelt.
Nach dem Login kopieren
  • Edge Cases:

    • Palindrome, die aus Zahlen wie 100...001 oder 99...99 generiert werden, werden durch explizite Prüfung dieser Fälle behandelt.
  • Hauptlogik:

    • Wir berechnen mögliche Palindrome und finden dann das nächstgelegene, indem wir absolute Differenzen vergleichen.

Diese Lösung schränkt mögliche Palindrom-Kandidaten effizient ein und wählt den nächstgelegenen aus, indem sie nur wenige Optionen berücksichtigt, was sie viel schneller macht als Brute-Force-Ansätze.

Kontaktlinks

Wenn Sie diese Serie hilfreich fanden, denken Sie bitte darüber nach, demRepositoryeinen Stern auf GitHub zu geben oder den Beitrag in Ihren bevorzugten sozialen Netzwerken zu teilen? Eure Unterstützung würde mir sehr viel bedeuten!

Wenn Sie weitere hilfreiche Inhalte wie diesen wünschen, folgen Sie mir gerne:

  • LinkedIn
  • GitHub

Das obige ist der detaillierte Inhalt von. Finden Sie das nächstgelegene Palindrom. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!