Ich hatte ein Interview, in dem ich furchtbar war. Also, jetzt versuche ich die Lösung für die Frage zu finden. Hier ist die Interviewfrage:
"Wir haben folgendes Mapping:
M: 1000, D: 500, C: 100, L: 50, X: 10, V: 5, I: 1.
Und wir haben die folgenden Regeln:
Jeder Buchstabe wird einem positiven ganzzahligen Wert zugeordnet
Sie fügen die Werte zusammen hinzu, außer ...
... Wenn einem Wert (oder Läufen mit den gleichen Werten) ein größerer Wert folgt, subtrahieren Sie die Summe dieser Werte.
Beispiele:
IIX - & gt; 8
MCCMIIX - & gt; 1808
Wir haben diese Java Methode: int valueOfRoman(char roman)
.
Wir haben die Java-Methode implementiert: int romanToInt(String s)
"
Ich weiß, dass es kein richtiges römisches Zahlensystem ist, aber das ist die eigentliche Frage.
Ich konnte eine funktionierende Lösung für ein richtiges römisches System kodieren. Aber ich kann es nicht ändern, so dass es sich an diese neuen Regeln anpasst, besonders an Regel 3. Ich habe es versucht, aber ohne Erfolg. Die Art, wie meine Lösung jetzt ist, für IIX, druckt 10 statt der richtigen Antwort von 8. Hier ist mein Code (ich habe auch valueOf
für meine Tests implementiert):
Jede Hilfe wird sehr geschätzt. Besonders nützlich wäre, wenn Sie mir sagen können, wie ich meinen Code ändern kann. Danke!
BEARBEITEN: Ich habe die Namen der Methoden so bearbeitet, dass sie klarer sind.
Mein Take - funktioniert mit den zugegebenermaßen kleinen Tests, die Sie geliefert haben.
%Vor%druckt
%Vor%So würde ich das Problem angehen:
Also, niemand hat meinen Hinweis verstanden. Dann werde ich es auch versuchen. Ich werde nicht auf die "IVX" -Dinge eingehen, weil ich das für einen Syntaxfehler halte.
%Vor%Mal sehen: IIX
%Vor%MCCMIIX
%Vor%Die Methode lässt zur Kürze die Eingabevalidierung aus. Ich gehe davon aus, dass alle Eingaben überprüft wurden und nur aus erlaubten Zeichen gemäß "den Regeln" bestehen.
So habe ich es gemacht.
Es funktioniert für die zwei Werte, die Sie erwähnten (IIX = 8 und MCCMIIX = 1808):
%Vor%EDIT 1:
Erklärung für "IVX" -Wert:
%Vor%"... addieren Werte zusammen, außer wenn ein Wert (oder Läufe von SAME Werte) folgt ein größerer Wert, Sie subtrahieren die Summe davon Lauf der Werte. "
Also ist die Antwort für IVX 14!
Diese Art von Problematiken sind normalerweise sehr einfach zu lösen, indem man rekursives Denken anwendet. Die Lösung könnte so aussehen:
%Vor%Selbst wenn eine rekursive Lösung verboten ist, ist es für mich einfacher, diesen Algorithmus zu rekursiv zu machen, als den prozeduralen Algorithmus auf Anhieb zu finden =)
Bearbeiten: Meine Ergebnisse:
Wert von MCCMIIX ist: 1808
Wert von IIX ist: 8
Wert von IVX ist: 4
Wert von IIVVL ist: 38
Tags und Links algorithm string java roman-numerals