摘要:字符數(shù)值例如,羅馬數(shù)字寫做,即為兩個(gè)并列的。通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。
一 目錄Create by jsliang on 2019-05-23 13:24:24
Recently revised in 2019-05-23 14:55:20
不折騰的前端,和咸魚有什么區(qū)別
目錄 |
---|
一 目錄 |
二 前言 |
三 解題 |
?3.1 解題 - for() |
?3.2 解題 - Map |
返回目錄
難度:簡(jiǎn)單
涉及知識(shí):數(shù)學(xué)、字符串
題目地址:leetcode-cn.com/problems/ro…
題目?jī)?nèi)容:
羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。
字符 數(shù)值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 羅馬數(shù)字 2 寫做 II ,即為兩個(gè)并列的 1。12 寫做 XII ,即為 X + II 。 27 寫做 XXVII, 即為 XX + V + II 。
通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數(shù)字 1 在數(shù)字 5 的左邊,所表示的數(shù)等于大數(shù) 5 減小數(shù) 1 得到的數(shù)值 4 。同樣地,數(shù)字 9 表示為 IX。這個(gè)特殊的規(guī)則只適用于以下六種情況:
I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。輸入確保在 1 到 3999 的范圍內(nèi)。
示例 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.
三 解題
返回目錄
官方題解:無
解題千千萬,官方獨(dú)一家,上面是官方使用 * 進(jìn)行的題解。
小伙伴可以先自己在本地嘗試解題,再看看官方解題,最后再回來看看 jsliang 講解下使用 JavaScript 的解題思路。
返回目錄
解題代碼:
var romanToInt = function(s) {
/**
* 特殊情況
* IV === 4
* IX === 9
* XL === 40
* XC === 90
* CD === 400
* CM === 900
* 正常情況
* I === 1
* V === 5
* X === 10
* L === 50
* C === 100
* D === 500
* M === 1000
*/
const arr = s.split("");
let result = 0;
for (let i = 0; i < arr.length; ) {
if (arr[i] === "I" && arr[i+1] === "V") {
result += 4;
i = i + 2;
} else if(arr[i] === "I" && arr[i+1] === "X") {
result += 9;
i = i + 2;
} else if(arr[i] === "X" && arr[i+1] === "L") {
result += 40;
i = i + 2;
} else if(arr[i] === "X" && arr[i+1] === "C") {
result += 90;
i = i + 2;
} else if(arr[i] === "C" && arr[i+1] === "D") {
result += 400
i = i + 2;
} else if(arr[i] === "C" && arr[i+1] === "M") {
result += 900;
i = i + 2;
} else if (arr[i] === "I") {
result += 1;
i = i + 1;
} else if (arr[i] === "V") {
result += 5;
i = i + 1;
} else if (arr[i] === "X") {
result += 10;
i = i + 1;
} else if (arr[i] === "L") {
result += 50;
i = i + 1;
} else if (arr[i] === "C") {
result += 100;
i = i + 1;
} else if (arr[i] === "D") {
result += 500;
i = i + 1;
} else if (arr[i] === "M") {
result += 1000;
i = i + 1;
}
}
return result;
};
執(zhí)行測(cè)試:
s:MCMXCIV
return:
1994
LeetCode Submit:
? Accepted
? 3999/3999 cases passed (248 ms)
? Your runtime beats 88.79 % of javascript submissions
? Your memory usage beats 52.85 % of javascript submissions (40.2 MB)
知識(shí)點(diǎn):
split():split() 方法使用指定的分隔符字符串將一個(gè) String 對(duì)象分割成字符串?dāng)?shù)組,以將字符串分隔為子字符串,以確定每個(gè)拆分的位置。split() 詳細(xì)介紹
解題思路:
通過 for() 來進(jìn)行暴力破解是最快的。
就像有句話:“暴力一時(shí)爽,一直暴力一直爽 —— jsliang”。
首先,我們只需要將參數(shù)打成數(shù)組(或者不打成數(shù)組,在 JavaScript 中,String 也有 length 和 string[i])。
然后,通過 for() 暴力循環(huán)。如果是正常情況,那么 i 就 + 1,如果是特殊情況,那么需要跳過下一次循環(huán),即 i = i + 2。
最后,通過 result 的相加,即可以獲取到最終結(jié)果。
3.2 解法 - Map返回目錄
解題代碼:
var romanToInt = function(s) {
/**
* 特殊情況
* IV === 4
* IX === 9
* XL === 40
* XC === 90
* CD === 400
* CM === 900
* 正常情況
* I === 1
* V === 5
* X === 10
* L === 50
* C === 100
* D === 500
* M === 1000
*/
let map = new Map();
map.set("I", 1);
map.set("V", 5);
map.set("X", 10);
map.set("L", 50);
map.set("C", 100);
map.set("D", 500);
map.set("M", 1000)
let result = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] + s[i+1] === "IV") {
result += 4;
i = i + 1;
} else if(s[i] + s[i+1] === "IX") {
result += 9;
i = i + 1;
} else if(s[i] + s[i+1] === "XL") {
result += 40;
i = i + 1;
} else if(s[i] + s[i+1] === "XC") {
result += 90;
i = i + 1;
} else if(s[i] + s[i+1] === "CD") {
result += 400
i = i + 1;
} else if(s[i] + s[i+1] === "CM") {
result += 900;
i = i + 1;
} else {
result += map.get(s[i]);
}
}
return result;
};
執(zhí)行測(cè)試:
s:MCMXCIV
return:
1994
LeetCode Submit:
? Accepted
? 3999/3999 cases passed (208 ms)
? Your runtime beats 99.08 % of javascript submissions
? Your memory usage beats 6.84 % of javascript submissions (43.5 MB)
知識(shí)點(diǎn):
Map:保存鍵值對(duì)。任何值(對(duì)象或者原始值) 都可以作為一個(gè)鍵或一個(gè)值。Map 詳細(xì)介紹
解題思路:
個(gè)人感覺,該方法有點(diǎn)像脫褲子放屁 ——多此一舉
首先,設(shè)置 Map,將正常情況存下來。
然后,遍歷字符串,判斷特殊情況,如果是特殊情況,需要跳過下一次循環(huán),否則直接獲取 Map 中對(duì)應(yīng)的值。
最后,將結(jié)果通過 result 給 return 出去。
jsliang 廣告推送:
也許小伙伴想了解下云服務(wù)器
或者小伙伴想買一臺(tái)云服務(wù)器
或者小伙伴需要續(xù)費(fèi)云服務(wù)器
歡迎點(diǎn)擊 云服務(wù)器推廣 查看!
jsliang 的文檔庫 由 梁峻榮 采用 知識(shí)共享 署名-非商業(yè)性使用-相同方式共享 4.0 國際 許可協(xié)議進(jìn)行許可。
基于github.com/LiangJunron…上的作品創(chuàng)作。
本許可協(xié)議授權(quán)之外的使用權(quán)限可以從 creativecommons.org/licenses/by… 處獲得。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/7855.html
摘要:微信公眾號(hào)記錄截圖記錄截圖目前關(guān)于這塊算法與數(shù)據(jù)結(jié)構(gòu)的安排前。已攻略返回目錄目前已攻略篇文章。會(huì)根據(jù)題解以及留言內(nèi)容,進(jìn)行補(bǔ)充,并添加上提供題解的小伙伴的昵稱和地址。本許可協(xié)議授權(quán)之外的使用權(quán)限可以從處獲得。 Create by jsliang on 2019-07-15 11:54:45 Recently revised in 2019-07-15 15:25:25 一 目錄 不...
摘要:月下半旬攻略道題,目前已攻略題。目前簡(jiǎn)單難度攻略已經(jīng)到題,所以后面會(huì)調(diào)整自己,在刷算法與數(shù)據(jù)結(jié)構(gòu)的同時(shí),攻略中等難度的題目。 Create by jsliang on 2019-07-30 16:15:37 Recently revised in 2019-07-30 17:04:20 7 月下半旬攻略 45 道題,目前已攻略 100 題。 一 目錄 不折騰的前端,和咸魚有什么區(qū)別...
摘要:將羅馬字母的字符串轉(zhuǎn)換為代表的整數(shù)這題不難,用一個(gè)存羅馬數(shù)字和具體數(shù)字的對(duì)應(yīng)關(guān)系,然后遍歷前后兩兩比較,該加加,該減減時(shí)間復(fù)雜度這里是自己寫的一個(gè)方法,里面用一個(gè),相當(dāng)于存對(duì)應(yīng)當(dāng)時(shí)一直想著用一個(gè)來存減的值,所以沒法用就用了指針,但其實(shí)就 Easy 013 Roman to Integer Description: 將羅馬字母的字符串轉(zhuǎn)換為代表的整數(shù)Roman numerals are ...
摘要:在線網(wǎng)站地址我的微信公眾號(hào)完整題目列表從年月日起,每天更新一題,順序從易到難,目前已更新個(gè)題。這是項(xiàng)目地址歡迎一起交流學(xué)習(xí)。 這篇文章記錄我練習(xí)的 LeetCode 題目,語言 JavaScript。 在線網(wǎng)站:https://cattle.w3fun.com GitHub 地址:https://github.com/swpuLeo/ca...我的微信公眾號(hào): showImg(htt...
摘要:羅馬數(shù)字轉(zhuǎn)整數(shù)羅馬數(shù)字包含以下七種字符,,,,,和。字符數(shù)值例如,羅馬數(shù)字寫做,即為兩個(gè)并列的。通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。同樣地,數(shù)字表示為。給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。 LeetCode13.羅馬數(shù)字轉(zhuǎn)整數(shù) JavaScript 羅馬數(shù)字包含以下七種字符: ·I, V, X, L,C,D 和 M。 字符 數(shù)值 I ...
閱讀 1062·2021-11-22 15:33
閱讀 3374·2021-11-08 13:20
閱讀 1390·2021-09-22 10:55
閱讀 2059·2019-08-29 11:08
閱讀 782·2019-08-26 12:24
閱讀 3078·2019-08-23 17:15
閱讀 2240·2019-08-23 16:12
閱讀 1944·2019-08-23 16:09