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. }

相关文章
|
1月前
|
存储
LeetCode整数反转
解决LeetCode上的整数反转问题的几种方法,包括错误的方法和优化后的解决方案,以及如何避免反转后的整数超出32位有符号整数范围的问题。
34 1
|
1月前
【LeetCode】整数翻转
【LeetCode】整数翻转
15 1
|
1月前
|
存储 C++
Leetcode第十二题(整数转罗马数字)
LeetCode第12题“整数转罗马数字”的解题方法,包括罗马数字的基本规则和特殊规则,以及如何使用C++实现整数到罗马数字的转换。
15 0
|
1月前
|
C++
Leetcode第十三题(罗马数字转整数)
这篇文章介绍了LeetCode第13题“罗马数字转整数”的解题方法,通过一个C++的类`Solution`中的`romanToInt`函数来实现,该函数使用哈希表和遍历字符串的方法,根据罗马数字的规则将输入的罗马数字字符串转换为对应的整数值。
47 0
|
1月前
|
算法 C++
Leetcode第八题(字符串转换整数(atoi))
这篇文章介绍了LeetCode上第8题“字符串转换整数(atoi)”的解题思路和C++的实现方法,包括处理前导空格、正负号、连续数字字符以及整数溢出的情况。
17 0
|
3月前
|
算法
LeetCode第13题目罗马数字转整数
该文章介绍了 LeetCode 第 13 题罗马数字转整数的解法,通过从大到小解析罗马数字,根据罗马数字的特点,按照从大到小的顺序匹配罗马数字和整数的关系,从而解决该问题,同时强调要注意观察题目考查的知识点特征。
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
3月前
|
Python
【Leetcode刷题Python】剑指 Offer 32 - III. 从上到下打印二叉树 III
本文介绍了两种Python实现方法,用于按照之字形顺序打印二叉树的层次遍历结果,实现了在奇数层正序、偶数层反序打印节点的功能。
56 6
|
3月前
|
搜索推荐 索引 Python
【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
本文介绍了牛客网题目"数组中未出现的最小正整数"的解法,提供了一种满足O(n)时间复杂度和O(1)空间复杂度要求的原地排序算法,并给出了Python实现代码。
113 2
|
17天前
|
机器学习/深度学习 人工智能 自然语言处理
280页PDF,全方位评估OpenAI o1,Leetcode刷题准确率竟这么高
【10月更文挑战第24天】近年来,OpenAI的o1模型在大型语言模型(LLMs)中脱颖而出,展现出卓越的推理能力和知识整合能力。基于Transformer架构,o1模型采用了链式思维和强化学习等先进技术,显著提升了其在编程竞赛、医学影像报告生成、数学问题解决、自然语言推理和芯片设计等领域的表现。本文将全面评估o1模型的性能及其对AI研究和应用的潜在影响。
16 1