Leetcode 13. 羅馬數(shù)字轉(zhuǎn)整數(shù)的java解法

13. 題目


13. 羅馬數(shù)字轉(zhuǎn)整數(shù) -> Link

羅馬數(shù)字包含以下七種字符: IV痢艺, X仓洼, LC堤舒,DM色建。

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

例如, 羅馬數(shù)字 2 寫做 II 舌缤,即為兩個并列的 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谆构。這個特殊的規(guī)則只適用于以下六種情況:

  • I 可以放在 V (5) 和 X (10) 的左邊裸扶,來表示 4 和 9。
  • X 可以放在 L (50) 和 C (100) 的左邊搬素,來表示 40 和 90呵晨。
  • C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900熬尺。

給定一個羅馬數(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.

題目分析


一季二、暴力解法

直接遍歷字符串,獲取每個字符所對應(yīng)的int數(shù)字相加即可揭措,對于題干中提到的六種特殊情況進(jìn)行判斷處理胯舷。

  • IV (4) 和 IX (9) 對比 VI (6) 和 XI (11)。 所以這總情況和最終值差-2
  • XL (40) 和 XC (90) 對比 LX (60) 和 CX (110)绊含。所以這總情況和最終值差-20
  • CD (400) 和 CM (900)對比DC (600) 和 MC (1100)桑嘶。所以這總情況和最終值差-200

Java

class Solution {
    public static int romanToInt(String s) {

      int sum = 0;
      if (s.indexOf("IV") != -1 || s.indexOf("IX") != -1) {
          sum -= 2;
      }
      if (s.indexOf("XL") != -1 || s.indexOf("XC") != -1) {
          sum -= 20;
      }
      if (s.indexOf("CD") != -1 || s.indexOf("CM") != -1) {
          sum -= 200;
      }

      for (int i = 0; i < s.length(); i++) {
        Character c = s.charAt(i);
        if (c == 'I') {
          sum += 1;
        } else if (c == 'V') {
          sum += 5;
        } else if (c == 'X') {
          sum += 10;
        } else if (c == 'L') {
          sum += 50;
        } else if (c == 'C') {
          sum += 100;
        } else if (c == 'D') {
          sum += 500;
        } else if (c == 'M') {
          sum += 1000;
        }
      }
      return sum;
   }
}

二、哈希表解法

創(chuàng)建一個Hash表躬充,存入羅馬和int對應(yīng)關(guān)系逃顶。定義sum 和 last,last用于記錄上一個位置字符代表的數(shù)字大小充甚,當(dāng)num < last說明是題干六種特殊情況以政。這時候 sum需要減去num。整個遍歷的順序為反向遍歷津坑。

public int romanToInt(String s) {
    HashMap<Character, Integer> map = new HashMap<Character, Integer>();
    map.put('I', 1);
    map.put('V', 5);
    map.put('X', 10);
    map.put('L', 50);
    map.put('C', 100);
    map.put('D', 500);
    map.put('M', 1000);

    int sum = 0;
    int last = -1;
    for (int i = 0; i < s.length(); i++) {
      int num = map.get(s.charAt(s.length() - 1 - i));
      if (num < last) {
        sum -= num;
      } else {
        sum += num;
      }
      last = num;
    }
    return sum;
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妙蔗,一起剝皮案震驚了整個濱河市傲霸,隨后出現(xiàn)的幾起案子疆瑰,更是在濱河造成了極大的恐慌,老刑警劉巖昙啄,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穆役,死亡現(xiàn)場離奇詭異,居然都是意外死亡梳凛,警方通過查閱死者的電腦和手機(jī)耿币,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韧拒,“玉大人淹接,你說我怎么就攤上這事十性。” “怎么了塑悼?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵劲适,是天一觀的道長。 經(jīng)常有香客問我厢蒜,道長霞势,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任斑鸦,我火速辦了婚禮愕贡,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘巷屿。我一直安慰自己固以,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布嘱巾。 她就那樣靜靜地躺著嘴纺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浓冒。 梳的紋絲不亂的頭發(fā)上栽渴,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機(jī)與錄音稳懒,去河邊找鬼闲擦。 笑死,一個胖子當(dāng)著我的面吹牛场梆,可吹牛的內(nèi)容都是我干的墅冷。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼或油,長吁一口氣:“原來是場噩夢啊……” “哼寞忿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起顶岸,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤腔彰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后辖佣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體霹抛,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年卷谈,在試婚紗的時候發(fā)現(xiàn)自己被綠了杯拐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖端逼,靈堂內(nèi)的尸體忽然破棺而出朗兵,到底是詐尸還是另有隱情,我是刑警寧澤顶滩,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布矛市,位于F島的核電站,受9級特大地震影響诲祸,放射性物質(zhì)發(fā)生泄漏浊吏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一救氯、第九天 我趴在偏房一處隱蔽的房頂上張望找田。 院中可真熱鬧,春花似錦着憨、人聲如沸墩衙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽漆改。三九已至,卻和暖如春准谚,著一層夾襖步出監(jiān)牢的瞬間挫剑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工柱衔, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留樊破,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓唆铐,卻偏偏與公主長得像哲戚,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子艾岂,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容