只寫了一個java版本的,思想知道了,語言知識工具,學學語法就好了,因此我就沒有寫C#與javascriptjavascript
我本身寫的,寫的比較粗糙java
class Solution {
public int romanToInt(String s) {
Map<Character,Integer> map = new HashMap<Character,Integer>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int result = 0;
if(s.length() % 2 != 0){
result += map.get(s.charAt(s.length() - 1));
}
for (int i = 0; i < s.length(); i=i+2) {
if(i + 2 > s.length()) return result;
if(map.get(s.charAt(i)) >= map.get(s.charAt(i + 1))){
result += map.get(s.charAt(i)) + map.get(s.charAt(i + 1));
}else{
result += map.get(s.charAt(i + 1)) - map.get(s.charAt(i));
}
}
return result;
}
}工具
總結:提交代碼時,個人方法提交不了,最終結果跟答案不符,s = "MCMXCVI"時,我走IDE最終結果是正確的,可是在LeetCode提交顯示結果是1996,不知道爲何,我都走debug了,也沒看出什麼,無耐。debug
貼一張我本身寫的代碼,在LeetCode運行結果指針
-------------------------------------分割線------------------------------------------------------ip
是時候展現真正的技術了EZ~~~~~~~~~~~·get
這是網上查的,從後面向前進行計算,先把最後一個值加上,而後賦值給一箇中間變量tag,指針向前移動一位,tag指向i-1,這樣進行比較,默認tag等於0,第一次比較tag就等於最後一位的值。主要就是tag,就靠tag支撐着邏輯。io
我作這道題是一次i加兩位,根據s.length()的奇偶數是否單獨加上最後一爲,下面的方法是直接使用tag,一位位比較而後進行相加,就不用考慮奇偶數了,用不用單獨加最後一位了,把最後一位給tag,默認把最後一位添加到結果中去,而後tag跟倒數第二位比較,進行加減,而後tag=倒數第二位數,以此類推。class
Map<Character,Integer> map = new HashMap<Character,Integer>();
map.put('I',1);
map.put('V',5);
map.put('X',10);
map.put('L',50);
map.put('C',100);
map.put('D',500);
map.put('M',1000);
int tag = 0;
int res = 0;
for (int i = s.length() - 1; i >= 0; i--){
if(map.get(s.charAt(i)) >= tag){
res += map.get(s.charAt(i));
}else{
res -= map.get(s.charAt(i));
}
tag = map.get(s.charAt(i));
}
return res;
}變量