<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ## 一.題目描述 Given a roman numeral, convert it to an integer.? Input is guaranteed to be within the range from 1 to 3999. ## 二.題目分析 還是先總結一下羅馬數字,這是網上找到的一些解釋:? 羅馬數字是最古老的數字表示方式,比阿拉伯數組早2000多年,起源于羅馬…? 羅馬數字有如下符號:? 基本字符: I V X L C D M? 對應阿拉伯數字 :1 5 10 50 100 500 1000? 計數規則: 相同的數字連寫,所表示的數等于這些數字相加得到的數,例如:`III = 3`小的數字在大的數字右邊,所表示的數等于這些數字相加得到的數,例如:`VIII = 8`小的數字,限于(I、X和C)在大的數字左邊,所表示的數等于大數減去小數所得的數,例如:`IV = 4`正常使用時,連續的數字重復不得超過三次在一個數的上面畫橫線,表示這個數擴大`1000`倍。 **題目思路**,從輸入字符串的第一個字符開始(從前向后遍歷羅馬數字),假設有一個臨時變量`k`,結果存放在`result`變量中,算法執行過程中分為以下三種情況: 如果當前字符所對應的數字比前一位字符小,那么就可以先將臨時變量的值`k`加到結果`result`中,然后開始下一段記錄。比如`VI = 5 + 1`,此時當前為為`'I'`,小于前一位`'V'`,又`k = 5`,當前位對應的數值`curr = 1`,則結果更新為:`result = k + curr`,然后更新臨時變量`k = curr`。 如果當前字符所對應的數字和上一個字符一樣,那么臨時變量`k`加上這個字符。比如`XXX = 30`,在此過程中`k = 10 + 10 + 10`。 如果當前字符所對應的數字比前一位字符大,意味著這一段的值應該是當前這個值減去前面累加的臨時變量`k`中的值,比如`IIV = 5 – 2`。 ## 三.示例代碼 ~~~ class Solution { public: int getRomanValue(char c) { switch (c) { case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return 0; } } int romanToInt(string s) { if (s.size() < 1) return -1; int result = 0; int temp = getRomanValue(s[0]); int k = temp; for (size_t i = 1; i < s.size(); i++) { int curr = getRomanValue(s[i]); if (temp > curr) { result += k; k = curr; } else if (temp == curr) k = k + curr; else k = curr - k; temp = curr; } result += k; return result; } }; ~~~ ## 四.小結 網上有更簡便的思路: ~~~ class Solution { public: int romanToInt(string s) { int map[26]; map['I' - 'A'] = 1; map['V' - 'A'] = 5; map['X' - 'A'] = 10; map['L' - 'A'] = 50; map['C' - 'A'] = 100; map['D' - 'A'] = 500; map['M' - 'A'] = 1000; int res = 0, n = s.size(); s.push_back(s[n - 1]); for (int i = 0; i < n; i++) { if (map[s[i] - 'A'] >= map[s[i + 1] - 'A']) res += map[s[i] - 'A']; else res -= map[s[i] - 'A']; } return res; } }; ~~~ 對應的題目:Integer to Roman。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看