平面設計專用網站臨安網站seo
原題鏈接:13. 羅馬數(shù)字轉整數(shù)
解題思路:
- 本題涉及到的羅馬數(shù)字都是唯一的,因此可以創(chuàng)建一個哈希表,存儲羅馬數(shù)字和整數(shù)的對應關系。
- 遍歷
s
,分別截取從i
開始的2位和1位字符串,查看其在哈希表中的羅馬數(shù)字對應的整數(shù),將其加和到結果中。
/*** @param {string} s* @return {number}*/
var romanToInt = function (s) {// 創(chuàng)建羅馬數(shù)字與整數(shù)的對應關系,可以看到它們互相是不重復的// 每次只需要截取s中的部分字符,在Map中查詢對應的整數(shù)即可const map = new Map([['M', 1000],['CM', 900],['D', 500],['CD', 400],['C', 100],['XC', 90],['L', 50],['XL', 40],['X', 10],['IX', 9],['V', 5],['IV', 4],['I', 1],])// 儲存結果let result = 0// 遍歷s,查詢羅馬數(shù)字對應的整數(shù)for (let i = 0; i < s.length; ) {// 截取兩個字符,查看是否滿足兩位羅馬數(shù)字if (map.has(s.substr(i, 2))) {// 將對應的整數(shù)加和到resultresult += map.get(s.substr(i, 2))// 計算了2位羅馬數(shù)字,指針向后移動2位i += 2} else {// 將對應的整數(shù)加和到結果result += map.get(s.substr(i, 1))// 計算了1位羅馬數(shù)字,指針向后移動1位i += 1}}return result
}