平面設(shè)計(jì)專用網(wǎng)站臨安網(wǎng)站seo
原題鏈接:13. 羅馬數(shù)字轉(zhuǎn)整數(shù)
解題思路:
- 本題涉及到的羅馬數(shù)字都是唯一的,因此可以創(chuàng)建一個(gè)哈希表,存儲(chǔ)羅馬數(shù)字和整數(shù)的對(duì)應(yīng)關(guān)系。
- 遍歷
s
,分別截取從i
開(kāi)始的2位和1位字符串,查看其在哈希表中的羅馬數(shù)字對(duì)應(yīng)的整數(shù),將其加和到結(jié)果中。
/*** @param {string} s* @return {number}*/
var romanToInt = function (s) {// 創(chuàng)建羅馬數(shù)字與整數(shù)的對(duì)應(yīng)關(guān)系,可以看到它們互相是不重復(fù)的// 每次只需要截取s中的部分字符,在Map中查詢對(duì)應(yīng)的整數(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],])// 儲(chǔ)存結(jié)果let result = 0// 遍歷s,查詢羅馬數(shù)字對(duì)應(yīng)的整數(shù)for (let i = 0; i < s.length; ) {// 截取兩個(gè)字符,查看是否滿足兩位羅馬數(shù)字if (map.has(s.substr(i, 2))) {// 將對(duì)應(yīng)的整數(shù)加和到resultresult += map.get(s.substr(i, 2))// 計(jì)算了2位羅馬數(shù)字,指針向后移動(dòng)2位i += 2} else {// 將對(duì)應(yīng)的整數(shù)加和到結(jié)果result += map.get(s.substr(i, 1))// 計(jì)算了1位羅馬數(shù)字,指針向后移動(dòng)1位i += 1}}return result
}