LeetCode:13、罗马数字转整数

简介: LeetCode:13、罗马数字转整数

两个方法。第一个方法相对较为复杂。

       第一个方法是把传入的罗马数字,每一个相对应的转为整数,再通过比较写入ArrayList集合的数据大小,进行判断加或减。(由于集合中的对象,是Object,比较的时候,需要的又是整数类型,所以需要强转)。int类型无法使用String.valueOf()进行强转,所以要用integer包装类。

       第二个方法是利用逆序数遍历。由于罗马数字的运算法则最后一个一定为加法,所以遍历从倒数第二个开始。

下面是代码:

 

法一:

1. import java.util.ArrayList;
2. 
3. 
4. public class leetCode_13_Method1 {
5. public int romanToInt(String s) {
6. int sum = 0;
7. 
8. ArrayList arr = new ArrayList();
9.         setDate(s, arr);
10. 
11. for (int i = arr.size() - 2; i >= 0; i--) {
12. int j = i + 1;
13. int dateI = Integer.parseInt(String.valueOf(arr.get(i)));
14. int dateJ = Integer.parseInt(String.valueOf(arr.get(j)));
15. 
16. if (dateJ > dateI) {
17.                 sum -= dateI;
18.             }
19. if (dateJ <= dateI) {
20.                 sum += dateI;
21.             }
22.         }
23. 
24.         sum += Integer.parseInt(String.valueOf(arr.get(arr.size() - 1)));
25. 
26. return sum;
27.     }
28. 
29. public static void setDate(String s, ArrayList arr) {
30. for (int i = 0; i < s.length(); i++) {
31. char ch = s.charAt(i);
32. String string = Character.toString(ch);
33. 
34. if (string.equals("I")) {
35.                 arr.add("1");
36.             }
37. if (string.equals("V")) {
38.                 arr.add("5");
39.             }
40. if (string.equals("X")) {
41.                 arr.add("10");
42.             }
43. if (string.equals("L")) {
44.                 arr.add("50");
45.             }
46. if (string.equals("C")) {
47.                 arr.add("100");
48.             }
49. if (string.equals("D")) {
50.                 arr.add("500");
51.             }
52. if (string.equals("M")) {
53.                 arr.add("1000");
54.             }
55.         }
56. 
57.     }
58. }

 

法二:

1. public class leetCode_13_Method2 {
2. 
3. public static int romanToInt(String s) {
4. 
5. int sum = 0;
6. char[] ch = s.toCharArray();
7. 
8. 
9. for (int i = ch.length - 2; i >= 0; i--) {
10. int j = i + 1;
11. if (getValue(ch[j]) > getValue(ch[i])) {
12.                 sum = sum - getValue(ch[i]);
13.             } else if (getValue(ch[j]) <= getValue(ch[i])) {
14.                 sum = sum + getValue(ch[i]);
15.             }
16. 
17.         }
18.         sum = sum + getValue(ch[ch.length - 1]);
19. return sum;
20.     }
21. 
22. private static int getValue(char chUnit) {
23. switch (chUnit) {
24. case 'I':
25. return 1;
26. case 'V':
27. return 5;
28. case 'X':
29. return 10;
30. case 'L':
31. return 50;
32. case 'C':
33. return 100;
34. case 'D':
35. return 500;
36. case 'M':
37. return 1000;
38. default:
39. return 0;
40.         }
41.     }
42. }

相关文章
|
15小时前
|
算法
力扣经典150题第十八题:整数转罗马数字
力扣经典150题第十八题:整数转罗马数字
4 0
|
19天前
|
SQL 算法 数据挖掘
深入探索力扣第12题:整数转罗马数字的算法之旅
深入探索力扣第12题:整数转罗马数字的算法之旅
|
19天前
|
SQL 算法 数据可视化
LeetCode第八题:字符串转换整数 (atoi)【8/1000 python】
LeetCode第八题:字符串转换整数 (atoi)【8/1000 python】
|
1月前
leetcode代码记录(整数拆分
leetcode代码记录(整数拆分
21 0
|
1月前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
1月前
|
存储
【力扣】7. 整数反转
【力扣】7. 整数反转
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
14天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
15天前
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
【LeetCode刷题】前缀和解决问题:742.寻找数组的中心下标、238.除自身以外数组的乘积
|
15天前
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名
【LeetCode刷题】二分查找:寻找旋转排序数组中的最小值、点名