Ich habe jeden Tag 13 LeetCode ausprobiert. Roman to Integer (Python, Go)

Einführung

@Ishishow betreibt eine kostenlose englische Word-Site E-tan.

Ich möchte jeden Tag an Letcode arbeiten, um meine Fähigkeiten als Programmierer zu verbessern und meine eigene Art der Lösung zu finden.

Was ist Leetcode?

leetcode.com Dies ist die Praxis des Codierens von Interviews für Softwareentwickler. Insgesamt wurden mehr als 1.500 Codierungsfragen gestellt, und es scheint, dass in tatsächlichen Interviews häufig dieselben Fragen gestellt werden.

Einführung in Go Sprache + Algorithmus Ich werde es mit Golang und Python lösen, um mein Gehirn zu stärken. (Python ist schwach, aber erfahren)

4. Frage (Problem 13)

  1. Roman to Integer

--Probleminhalt (japanische Übersetzung)

: Römische Zahlen werden durch sieben verschiedene Symbole "I", "V", "X", "L", "C", "D" und "M" dargestellt. Symbolwert I 1 V 5 X 10 L 50 C 100 D 500 M 1000

Zum Beispiel römische Zahlen`2`Yo`II`Eingeschrieben werden nur die beiden addiert.`12`Ist geschrieben`XII`ist`X + II`.. Das ist einfach. Nummer`27`Ist geschrieben`XXVII`ist`XX + V + II`。

Römische Zahlen werden normalerweise von links nach rechts geschrieben, von maximal bis minimal. Die Nummer 4 ist jedoch nicht`IIII`.. Stattdessen ist die vierte Zahl`IV`.. Ist geschrieben. Eins ist vor 5, also subtrahiere es zu 4. Das gleiche Prinzip ist geschrieben`IX`Dies gilt auch für Nummer 9. Es gibt sechs Beispiele, bei denen Subtraktion verwendet wird:

- `I``V`(5) und`X`Es kann vor (10) platziert werden, um 4 und 9 zu machen.
- `X``L`(50) und`C`Es kann vor (100) platziert werden, um 40 und 90 zu machen.
- `C``D`(500) und`M`Sie können es vor (1000) platzieren, um 400 und 900 zu erstellen.

Konvertieren Sie eine römische Zahl in eine ganze Zahl.

Example 1:

Input: s = "III"
Output: 3

Example 2:

Input: s = "IV"
Output: 4

Example 3:

Input: s = "IX"
Output: 9

Example 4:

Input: s = "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

Example 5:

Input: s = "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.

Tipps

I - 1
V - 5
X - 10
L - 50
C - 100
D - 500
M - 1000

**Rules:**
\* If I comes before V or X, subtract 1 eg: IV = 4 and IX = 9
\* If X comes before L or C, subtract 10 eg: XL = 40 and XC = 90
\* If C comes before D or M, subtract 100 eg: CD = 400 and CM = 900 

Denkweise

  1. Erstellen Sie eine Hash-Map mit Bezug auf den Hinweis
  2. Lesen Sie die Zeichenfolge zeichenweise, vergleichen Sie die dem Zeichen entsprechende Zahl mit der Zahl des nachfolgenden Zeichens, addieren Sie sie so, wie sie ist, wenn sie groß ist, und addieren Sie den Wert, der durch Subtrahieren dieser Zeichnung erhalten wird, wenn sie klein ist (Code). Es kann schneller zu sehen sein)

Erläuterung

  1. Go setzt den Anfangswert mit der Kartenfunktion. (Ich habe make für das Problem von 1.Two Sum verwendet, aber diesmal ist der Anfangswert enthalten, sodass die Karte in Ordnung ist.)

  2. Python ist einfach zu manipulieren, also werde ich es mir später ansehen, aber in Go werde ich es in ein Array konvertieren und das vorherige Zeichen betrachten.

--Antwortcode

class Solution(object):
    def romanToInt(self, s):
        roman = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
        res, i = 0, 0
        for i in range(len(s)):
            curr, nxt = s[i], s[i+1:i+2]
            if nxt and roman[curr] < roman[nxt]:
                res -= roman[curr]
            else:
                res += roman[curr]
        return res

Die String-Manipulation ist mit Slices einfacher

import "strings"

func romanToInt(s string) int {
    var number int = 0
    var carry int = 0
    hashT := map[string]int{
            "I": 1,
            "V": 5,
            "X": 10,
            "L": 50,
            "C": 100,
            "D": 500,
            "M": 1000,
    }

    for _, v := range strings.Split(s, "") {
            if carry < hashT[v] {
                    number = number - (carry * 2) + hashT[v]
            } else {
                    number = number + hashT[v]
            }
            carry = hashT[v]
    }
    return number
}

Ich betrachte die vorherige Nummer mit einer Variablen namens Carry. Da die vorherige Zahl einmal addiert wird und die letztere Zahl größer ist, wird die Zahl zweimal subtrahiert.

Ich habe auch das Strings-Paket importiert, weil ich Split verwendet habe, um die Strings in ein Array zu verwandeln.

Go und Python-Ausführungszeit

Von links RunTime, Speicher, Sprache.

キャプチャ.PNG

Recommended Posts

Ich habe jeden Tag 13 LeetCode ausprobiert. Roman to Integer (Python, Go)
Ich habe jeden Tag 20 LeetCode ausprobiert. Gültige Klammern (Python, Go)
Ich habe jeden Tag LeetCode 9 ausprobiert. Palindrome Number (Python, Go)
Ich habe jeden Tag LeetCode ausprobiert. 1. Zwei Summen (Python, Go)
Ich habe jeden Tag LeetCode ausprobiert. 14. Längstes allgemeines Präfix (Python, Go)
Ich habe jeden Tag LeetCode 21 ausprobiert. Zwei sortierte Listen zusammenführen (Python, Go)
Ich habe jeden Tag LeetCode ausprobiert 26. Duplikate aus sortiertem Array entfernen (Python, Go)
Ich habe versucht, Python zu berühren (Installation)
Ich habe es mit Grumpy versucht (Python ausführen).
Ich habe versucht, die Behandlung von Python-Ausnahmen zusammenzufassen
Ich habe versucht, PLSA in Python zu implementieren
Ich habe versucht, Permutation in Python zu implementieren
Ich habe versucht, PLSA in Python 2 zu implementieren
Python3-Standardeingabe habe ich versucht zusammenzufassen
Ich habe versucht, ADALINE in Python zu implementieren
Ich habe versucht, PPO in Python zu implementieren
[Python] Ich habe versucht, TF-IDF stetig zu berechnen
Ich habe versucht, Python zu berühren (grundlegende Syntax)
Ich habe versucht, CloudWatch-Daten mit Python abzurufen
Ich habe versucht, LLVM IR mit Python auszugeben
Ich habe versucht, TOPIC MODEL in Python zu implementieren
Ich habe versucht, mit Python Faiss zu laufen, Go, Rust
Ich habe versucht, die Herstellung von Sushi mit Python zu automatisieren
Ich habe versucht, eine selektive Sortierung in Python zu implementieren
LeetCode Ich habe versucht, die einfachen zusammenzufassen
[LIVE] Ich habe versucht, die Sonnenauf- und -untergangszeiten jeden Tag landesweit zu liefern
Ich habe Python> autopep8 ausprobiert
Ich habe versucht zu debuggen.
Ich habe Python> Decorator ausprobiert
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe versucht zusammenzufassen, wie man Matplotlib von Python verwendet
Ich habe versucht, Mine Sweeper auf dem Terminal mit Python zu implementieren
Ich habe versucht, mit Blenders Python script_Part 01 zu beginnen
Ich habe versucht, eine CSV-Datei mit Python zu berühren
Lassen Sie Code Day74 ab Null "12. Integer to Roman"
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe versucht, einen Pseudo-Pachislot in Python zu implementieren
Fortsetzung ・ Ich habe versucht, Slackbot zu erstellen, nachdem ich Python3 studiert habe
Ich habe versucht, mit Blenders Python script_Part 02 zu beginnen
Ich habe versucht, Drakues Poker in Python zu implementieren
Ich habe versucht, künstliches Perzeptron mit Python zu implementieren
Ich habe versucht, GA (genetischer Algorithmus) in Python zu implementieren
[Go + Gin] Ich habe versucht, eine Docker-Umgebung zu erstellen
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen