一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

使用JavaScript | Python | Java | C++解決從羅馬數(shù)字轉(zhuǎn)換到阿拉伯?dāng)?shù)字

 海擁 2021-11-30

從羅馬數(shù)字轉(zhuǎn)換到阿拉伯?dāng)?shù)字


在這里插入圖片描述

問(wèn)題描述:

羅馬數(shù)字是由七個(gè)不同的符號(hào)表示:IVXLCDM。

Symbol(標(biāo)記)Value (值)
I1
V5
X10
L50
C100
D500
M1000

例如,2用羅馬數(shù)字II書(shū)寫(xiě),只是將兩個(gè)I加在一起。12作為寫(xiě)XII,這是用X + II。數(shù)字27寫(xiě)為XXVII,即XX + V + II

羅馬數(shù)字通常從左到右從大到小書(shū)寫(xiě)。但是,四的數(shù)字不是IIII。而是將數(shù)字四寫(xiě)為IV。因?yàn)橐粋€(gè)在之前,所以我們減去它等于。相同的原理適用于數(shù)字9,記為IX。在六種情況下使用減法:

  • I可以放在V(5)X(10)之前制作49。
  • X可以放在L(50)C(100)之前制作4090。
  • C可以放在D(500)M(1000)之前制作400900

給定羅馬數(shù)字,將其轉(zhuǎn)換為整數(shù)。

例子:

范例1:
輸入:s =“ III”
輸出:3
范例2:
輸入:s =“ IV”
輸出:4
范例3:
輸入:s =“ IX”
輸出:9
范例4:
輸入:s =“LVIII”
輸出:58
解釋:L = 50,V = 5,III = 3。
范例5:
輸入:s =“ III”
輸出:3
解釋:M = 1000, CM = 900, XC = 90 and IV = 4

限制條件:

  • 1 <= s.length <= 15
  • s僅包含字符('I’, 'V’, 'X’, 'L’, 'C’, 'D’, 'M’)。
  • 確保s范圍內(nèi)的有效羅馬數(shù)字[1, 3999]。

解決思路:

(跳轉(zhuǎn)至:問(wèn)題描述||代碼:JavaScript | Python | Java | C ++)

關(guān)于羅馬數(shù)字計(jì)數(shù)的唯一真正棘手的事情是,數(shù)字被用作減值而不是加值。在“IV”,例如,值“I”,1,從的值中減去“V”,5。否則,您只需將所有數(shù)字的值相加即可。

關(guān)于減號(hào),我們應(yīng)該意識(shí)到的一件事是它們是可識(shí)別的,因?yàn)樗鼈兂霈F(xiàn)在較大的數(shù)字之前。這意味著迭代羅馬數(shù)字的更簡(jiǎn)單方法是從右到左,以幫助進(jìn)行識(shí)別過(guò)程。

因此,在這里要做的一件簡(jiǎn)單的事情是向后遍歷S,查找每個(gè)字母的值,然后將其添加到我們的答案(ans)中。如果我們遇到的字母值小于到目前為止所看到的最大字母值,則應(yīng)減去而不是加。

標(biāo)準(zhǔn)方法是使用一個(gè)單獨(dú)的變量來(lái)跟蹤看到的最高值,但是這里有一個(gè)更簡(jiǎn)單的技巧。由于數(shù)字通常以羅馬數(shù)字符號(hào)從右到左增加,因此任何減數(shù)也必須小于我們當(dāng)前的ans。

因此,我們可以在這里避免使用額外的變量。我們確實(shí)遇到了重復(fù)數(shù)字導(dǎo)致問(wèn)題的情況(即“III”),但是我們可以通過(guò)將num乘以24之間的任意數(shù)字,然后再將其與ans進(jìn)行比較來(lái)清除它,因?yàn)閿?shù)字在數(shù)值上的躍遷為至少5倍

一旦我們知道如何正確識(shí)別減數(shù),就可以簡(jiǎn)單地向后迭代S來(lái)查找并返回ans。

執(zhí)行代碼:

Javascript和Python都可以非??焖俚厥褂脤?duì)象/區(qū)分對(duì)象進(jìn)行操作,因此我們將使用查找表來(lái)獲取羅馬數(shù)字值。

Java和C ++都不處理對(duì)象,因此我們將使用切換用例以相同的方式工作。

JavaScript代碼:

(跳轉(zhuǎn)至:問(wèn)題描述||解決思路

const roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

var romanToInt = function(S) {
    let ans = 0
    for (let i = S.length-1; ~i; i--) {
        let num = roman[S.charAt(i)]
        if (4 * num < ans) ans -= num
        else ans += num
    }
    return ans
};

Python代碼:

(跳轉(zhuǎn)至:問(wèn)題描述||解決思路

roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}

class Solution:
    def romanToInt(self, S: str) -> int:
        ans = 0
        for i in range(len(S)-1,-1,-1):
            num = roman[S[i]]
            if 4 * num < ans: ans -= num
            else: ans += num
        return ans

Java代碼:

(跳轉(zhuǎn)至:問(wèn)題描述||解決思路

class Solution {
    public int romanToInt(String S) {
        int ans = 0, num = 0;
        for (int i = S.length()-1; i >= 0; i--) {
            switch(S.charAt(i)) {
                case 'I': num = 1; break;
                case 'V': num = 5; break;
                case 'X': num = 10; break;
                case 'L': num = 50; break;
                case 'C': num = 100; break;
                case 'D': num = 500; break;
                case 'M': num = 1000; break;
            }
            if (4 * num < ans) ans -= num;
            else ans += num;
        }
        return ans;
    }
}

C++代碼:

(跳轉(zhuǎn)至:問(wèn)題描述||解決思路

class Solution {
public:
    int romanToInt(string S) {
        int ans = 0, num = 0;
        for (int i = S.size()-1; ~i; i--) {
            switch(S[i]) {
                case 'I': num = 1; break;
                case 'V': num = 5; break;
                case 'X': num = 10; break;
                case 'L': num = 50; break;
                case 'C': num = 100; break;
                case 'D': num = 500; break;
                case 'M': num = 1000; break;
            }
            if (4 * num < ans) ans -= num;
            else ans += num;
        }
        return ans;        
    }
};

歡迎關(guān)注作者公眾號(hào)【海擁】

保存或者長(zhǎng)按識(shí)別

后面我還會(huì)持續(xù)更新類似免費(fèi)好玩的H5小游戲、Java小游戲、好玩、實(shí)用的項(xiàng)目和軟件等等

更多相關(guān)

  • 勇敢的兔子瘋狂奔跑小游戲
  • 用HTML實(shí)現(xiàn)簡(jiǎn)單的下雪特效
  • youtube-dl安裝和使用方法
  • 基于Hexo和GitHub搭建自己的博客
  • java五子棋小游戲含免費(fèi)源碼
  • 免費(fèi)且好用的GIF錄制軟件LICEcap
  • 100個(gè)最常問(wèn)的JavaScript面試問(wèn)答-第1部分
  • 100個(gè)最常問(wèn)的JavaScript面試問(wèn)答-第2部分
  • 100個(gè)最常問(wèn)的JavaScript面試問(wèn)答-第3部分

最后,不要忘了?或📑支持一下哦

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    少妇丰满a一区二区三区| 91精品视频免费播放| 99久热只有精品视频免费看| 69精品一区二区蜜桃视频| 大伊香蕉一区二区三区| 国产午夜精品在线免费看| 最好看的人妻中文字幕| 国产精品免费无遮挡不卡视频 | 中文人妻精品一区二区三区四区| 五月婷婷缴情七月丁香 | 亚洲国产av精品一区二区| 国产高清精品福利私拍| 国内外激情免费在线视频| 中文字幕禁断介一区二区| 国产精品一区日韩欧美| 国产精品尹人香蕉综合网| 色哟哟国产精品免费视频| 一区二区免费视频中文乱码国产| 老熟女露脸一二三四区| 亚洲精品中文字幕在线视频| 又大又紧又硬又湿又爽又猛| 国产亚洲精品香蕉视频播放| 国产色偷丝袜麻豆亚洲| 精品日韩av一区二区三区| 欧美日韩国产成人高潮| 五月天丁香亚洲综合网| 亚洲国产精品无遮挡羞羞| 欧美三级不卡在线观线看| 欧美亚洲国产日韩一区二区| 国内女人精品一区二区三区| 欧美日韩国产成人高潮| 久久成人国产欧美精品一区二区 | 国产日韩在线一二三区| 不卡中文字幕在线免费看| 国内精品一区二区欧美| 国产午夜福利在线观看精品| 小黄片大全欧美一区二区| 久久国产精品熟女一区二区三区| 日韩性生活视频免费在线观看| 亚洲国产成人av毛片国产| 中文字幕一区二区久久综合|