<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          leetcode-羅馬數(shù)字轉(zhuǎn)整數(shù)

          共 2034字,需瀏覽 5分鐘

           ·

          2021-01-16 10:37

          題意

          羅馬數(shù)字包含以下七種字符:?I,?V,?X,?LCD? 和 M

          字符?數(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.

          提示

          • 題目所給測試用例皆符合羅馬數(shù)字書寫規(guī)則,不會出現(xiàn)跨位等情況。

          • IC 和 IM 這樣的例子并不符合題目要求,49 應(yīng)該寫作 XLIX,999 應(yīng)該寫作 CMXCIX 。

          • 關(guān)于羅馬數(shù)字的詳盡書寫規(guī)則,可以參考 羅馬數(shù)字 - Mathematics 。

          出處

          鏈接:https://leetcode-cn.com/problems/roman-to-integer

          思路

          首先明確一下題意,輸入一串字符串,輸出一個整數(shù)。再次,字符串還挺有規(guī)律的,產(chǎn)自羅馬。我們自然而然會想到創(chuàng)建一個羅馬數(shù)字和數(shù)字的關(guān)系映射,在這里我們可以創(chuàng)建一個對象,根據(jù)鍵值對來解答,也可以試試 Map 來建立他們之間的關(guān)系,然后由題意可以知道,存在一些特例,大的數(shù)字在小的后面,所以我們順藤摸瓜地想到了,前后兩個元素比大小,如果前面的比后面的大,那么就把前面的加到結(jié)果,如果后面的比前面的大,那么就把后面的減去前面的加到結(jié)果中去,這里還是要討論下特殊情況,當(dāng)只有一個元素的時候,就可以直接返回了,除此之外,因為是整數(shù),做的多了有經(jīng)驗就會去考慮精度會不會溢出,好開心呀,這題輸入范圍在[1, 3999],過。

          代碼

          /**
          ?*?@param?{string}?s
          ?*?@return?{number}
          ?*/

          const?romanToInt?=?function?(s)?{
          ??const?obj?=?{
          ????I:?1,
          ????V:?5,
          ????X:?10,
          ????L:?50,
          ????C:?100,
          ????D:?500,
          ????M:?1000,
          ??};
          ??let?res?=?0;
          ??if?(s.length?===?1)?{
          ????res?=?obj[s];
          ??}?else?{
          ????for?(let?i?=?0;?i???????if?(obj[s[i]]?1]])?{
          ????????res?=?res?+?obj[s[i?+?1]]?-?obj[s[i]];
          ????????i++;
          ??????}?else?{
          ????????res?=?res?+?obj[s[i]];
          ??????}
          ????}
          ??}
          ??return?res;
          };

          export?default?romanToInt;

          測試

          import?romanToInt?from?'../../code/leetcode/13';

          describe('test?function?romanToInt:',?()?=>?{
          ??test('test?case?s?=?MCMXCIV',?()?=>?{
          ????const?res?=?romanToInt('MCMXCIV');
          ????expect(res).toBe(1994);
          ??});

          ??test('test?case?s?=?III',?()?=>?{
          ????const?res?=?romanToInt('III');
          ????expect(res).toBe(3);
          ??});

          ??test('test?case?s?=?DCXXI',?()?=>?{
          ????const?res?=?romanToInt('DCXXI');
          ????expect(res).toBe(621);
          ??});

          ??test('test?case?s?=?MDCXCV',?()?=>?{
          ????const?res?=?romanToInt('MDCXCV');
          ????expect(res).toBe(1695);
          ??});
          });

          思考

          • 在不嫌麻煩的情況下,你能先實現(xiàn)個哈希表,然后再用樓上的想法帶進去實現(xiàn)嗎?

          哈哈哈哈,挖坑不填坑。。。。。。

          說明

          本文首發(fā)于 GitHub 倉庫https://github.com/ataola/coding,線上閱讀地址:https://zhengjiangtao.cn/coding/,轉(zhuǎn)載請注明出處,謝謝!


          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲乱伦图片小说 | 久久久久99精品成人片欧美一区 | 久久婷婷网站 | 一区一二三视频 | 性无码一区二区 |