leetcode面試題解題 - 羅馬數字轉整數 -JS版

最近在複習一些前端的面試題,在leetcode上刷了下,由簡單的開始,再慢慢深入,昨天遇到個題,蠻有意思的,Javascript版本的解題思路,雖然是「簡單」級別的題,但還是值得分享一下的,歡迎大佬們補充自己的實現方式。

題:羅馬數字轉整數 -JS版

羅馬數字包含以下七種字符: I, V, X, L,C,D 和 M。


字符          數值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如, 羅馬數字 2 寫做 II ,即爲兩個並列的 1。12 寫做 XII ,即爲 X + II 。 27 寫做 XXVII, 即爲 XX + V + II 。

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示爲 IX。這個特殊的規則只適用於以下六種情況:

I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的範圍內。

  • 示例 1:
輸入: "III"
輸出: 3

  • 示例 2:
輸入: "IV"
輸出: 4
  • 示例 3:
輸入: "IX"
輸出: 9
  • 示例 4:
輸入: "LVIII"
輸出: 58
解釋: L = 50, V= 5, III = 3.
  • 示例 5:
輸入: "MCMXCIV"
輸出: 1994
解釋: M = 1000, CM = 900, XC = 90, IV = 4.

看着蠻簡單的,還是想了好久,太菜了,以後要多練啊,最終給出了兩種思路~
歡迎大佬們補充!!
思路:建立一個對象obj來存儲 羅馬數對應的數值,然後看參數s切割後對應的值 ,進行遍歷,從左到右,如當前值小於下一個的值,則相減,否則相加。

  • 示例一:
var romanToInt = function(s) {
  var obj = {
      I:1,
      V:5,
      X:10,
      L:50,
      C:100,
      D:500,
      M:1000 
  };
  var result= 0;
  s.split("").map((k,v,arr)=>{
    var next = obj[arr[v+1]] || 0;
    var active = obj[arr[v]];
    
    if(active < next){
      result-= active;
    }else {
      result+=active;
    };
    return k;
  });
  return result;
};
  • 示例二:
var romanToInt = function(s) {
  var obj = {
    I:1,
    V:5,
    X:10,
    L:50,
    C:100,
    D:500,
    M:1000 
  };
  var result= 0;
  var arr = s.split("");
  for(var i=arr.length-1;i>=0;i--){
    result+=obj[arr[i]];
    if(i>0 && obj[arr[i]] > obj[arr[i-1]]){
        result-=obj[arr[--i]];
    }

  };
  return result;
};

推薦閱讀

vue\react\java等資源共享
團隊解散,我們該何去何從?
webpack4配置詳解之慢嚼細嚥
小程序項目之做完項目老闆給我加了6k薪資~
面試踩過的坑,都在這裏了~
你應該做的前端性能優化之總結大全!
如何給localStorage設置一個過期時間?
動畫一點點 - 如何用CSS3畫出懂你的3D魔方?
動畫一點點 - 手把手教你如何繪製一輛會跑車
SVG Sprites Icon的使用技巧

重點推薦:

作者:蘇南 - 首席填坑官

鏈接:http://susouth.com/

交流:912594095、公衆號:honeyBadger8

本文原創,著作權歸作者所有。商業轉載請聯繫@IT·平頭哥聯盟獲得授權,非商業轉載請註明原鏈接及出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章