罗马数字转阿拉伯数字

我自己写的代码既冗余效率又低。故参考了LeetCode大佬的代码,效率是真的高,不过占用内存却没有想象中的那么好。

 1 import java.util.*;
 2 
 3 class Solution {
 4     public int romanToInt(String s) {
 5         int sum = 0;
 6         int preNum = getValue(s.charAt(0));
 7         for(int i = 1;i < s.length(); i ++) {
 8             int num = getValue(s.charAt(i));
 9             if(preNum < num) {
10                 sum -= preNum;
11             } else {
12                 sum += preNum;
13             }
14             preNum = num;
15         }
16         sum += preNum;
17         return sum;
18     }
19 
20     private int getValue(char ch) {
21         switch(ch) {
22             case 'I': return 1;
23             case 'V': return 5;
24             case 'X': return 10;
25             case 'L': return 50;
26             case 'C': return 100;
27             case 'D': return 500;
28             case 'M': return 1000;
29             default: return 0;
30         }
31     }
32 }
33 
34 public class RomeToNums {
35 
36     public static void main(String[] args) {
37         Solution so = new Solution();
38         int testResult = so.romanToInt("XLII");
39         System.out.println(testResult);
40     }
41 
42 }

这里采用的是往后多看一步,把前面的数记住的方法,如果前面的数比后面的数小,那么就拿总数减,反之则是加。(这里默认输入的罗马数字都是合法的)

posted @ 2020-03-26 23:25  模糊计算士  阅读(115)  评论(0)    收藏  举报