力扣刷題(13.羅馬數字轉整數)

題目描述

題目直接截圖於力扣(LeetCode)。算法

該題網址:https://leetcode-cn.com/problems/roman-to-integer/函數

用到的知識

  題很簡單,貌似沒用到什麼複雜的算法。spa

思路

  觀察羅馬數字的寫法,能夠獲得一個很簡單的規律:當前一個數字的值比後一個數字大時,直接將兩個數加起來,不然先減去前一個數,而後再加上當前數-前一個數的值...就這樣一直到字符串結束,最後返回相加的結果便可。指針

代碼(C)

 1 int getInt(char c) // 獲取字符對應的整數
 2 {
 3     int r;
 4     switch(c)
 5     {
 6         case 'I': r = 1; break;
 7         case 'V': r = 5; break;
 8         case 'X': r = 10; break;
 9         case 'L': r = 50; break;
10         case 'C': r = 100; break;
11         case 'D': r = 500; break;
12         case 'M': r = 1000; break; // 給的通常都是符合要求的,不用考慮那些異常狀況。
13     }
14     return r;
15 }
16 
17 int romanToInt(char * s){
18     int len = strlen(s); // 獲取字符指針的長度,也能夠本身寫一個函數,但速度會降低一點。
19     if(len == 0)
20     {
21         return 0;
22     }
23     int i;
24     int n;
25     int r = getInt(s[0]);
26     for(i = 1; i < len; i++)
27     {
28         if(getInt(s[i-1]) >= getInt(s[i])) // 判斷前一個當前數字和前一個數字那個數字大,若是前一個數字大於其後的數字,直接相加值。
29         {
30             r += getInt(s[i]);
31         }
32         else // 不然先減去前一個數字,而後再加上【當前數字減去前一個數字】的值。
33         {
34             r -= getInt(s[i-1]);
35             n = getInt(s[i]) - getInt(s[i-1]);
36             r += n;
37         }
38     }
39     return r;
40 }
相關文章
相關標籤/搜索