題目描述
題目直接截圖于力扣(LeetCode),
該題網址:https://leetcode-cn.com/problems/roman-to-integer/

用到的知識
題很簡單,貌似沒用到什么復雜的演算法,
思路
觀察羅馬數字的寫法,可以得到一個很簡單的規律:當前一個數字的值比后一個數字大時,直接將兩個數加起來,否則先減去前一個數,然后再加上當前數-前一個數的值...就這樣一直到字串結束,最后回傳相加的結果即可,
代碼(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 }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249373.html
標籤:其他
上一篇:動態規劃解題方法
下一篇:2021寒假每日一題《貨艙選址》
