LeetCode - 13. Roman to Integer
来源:互联网 发布:js实现继承有哪些方式 编辑:程序博客网 时间:2024/06/10 20:05
题目:
Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999.
思路与步骤:
分两步进行,先对应,再计算。基本思路是:
首先将 roman 基本字符与阿拉伯数字对应起来,存在一个结构中,然后对输入的字符串逐个字符判断,对应。最后得出最终的阿拉伯数字。
由于存放 roman-int 的对应结构的选择不同,主要有下面两种不同的思路(每种思路可以有不同的实现方法):
1. 用switch-case语句
1.1 两个函数
第一个函数 baseChar() 先取得对应关系,后面直接操作 int 型的 baseChar 即可。
1.2 一个函数
比上面多用一个数组。先将字符串 s 中每个字符对应的数字存入 int 数组 nums[ ] 中,后面计算时直接对 nums[] 进行操作即可。
2. 用hashmap
将 roman 与 int 存入hashmap中。
编程实现:
1. 用switch-case语句
1.1 两个函数
public class Solution { // method-1: switch-case and two functions public int baseChar(char c){ int baseInt = 0; switch(c){ case 'I': baseInt = 1; break; case 'V': baseInt = 5; break; case 'X': baseInt = 10; break; case 'L': baseInt = 50; break; case 'C': baseInt = 100; break; case 'D': baseInt = 500; break; case 'M': baseInt = 1000; break; default: baseInt = 0; } return baseInt; /* //比上面设置一个baseInt慢 switch(c){ case 'I': return 1; case 'V': return 5; case 'X': return 10; case 'L': return 50; case 'C': return 100; case 'D': return 500; case 'M': return 1000; default: return 0; }*/ } public int romanToInt(String s) { int result = 0; char[] romanChar = s.toCharArray(); int slen = s.length(); for(int i=1; i<slen; i++){ if( baseChar(romanChar[i-1]) < baseChar(romanChar[i]) ) result = result - baseChar(romanChar[i-1]); else result = result + baseChar(romanChar[i-1]); } result = result + baseChar(romanChar[slen-1]); return result; }}
1.2 一个函数
public class Solution { // method-2: switch-case and one function with array, 比method-1慢 public int romanToInt(String s) { int result = 0; int slen = s.length(); int[] num = new int[slen]; char[] romanChar = s.toCharArray(); for(int i=0; i<slen; i++){ switch(romanChar[i]){ case 'I': num[i] = 1; break; case 'V': num[i] = 5; break; case 'X': num[i] = 10; break; case 'L': num[i] = 50; break; case 'C': num[i] = 100; break; case 'D': num[i] = 500; break; case 'M': num[i] = 1000; break; default: num[i] = 0; } } for(int i=1; i<slen; i++){ if(num[i-1] < num[i]) result = result - num[i-1]; else result = result + num[i-1]; } result = result + num[slen-1]; return result; }}
1.1 比 1.2 快。
2. 用hashmap
public class Solution { // method-3: using hashmap public int romanToInt(String s) { Map<Character, Integer> numsMap = new HashMap<>(); numsMap.put('I', 1); numsMap.put('V', 5); numsMap.put('X', 10); numsMap.put('L', 50); numsMap.put('C', 100); numsMap.put('D', 500); numsMap.put('M', 1000); int result = 0; int slen = s.length(); char[] romanChar = s.toCharArray(); for(int i=1; i<slen; i++){ if(numsMap.get(romanChar[i-1]) < numsMap.get(romanChar[i])) result = result - numsMap.get(romanChar[i-1]); else result = result + numsMap.get(romanChar[i-1]); } result = result + numsMap.get(romanChar[slen-1]); return result; }}
用switch-case语句比hashmap快。
上述方法中,method-1 最快。
0 0
- LeetCode 13. Roman to Integer
- [LeetCode]13.Roman to Integer
- LeetCode --- 13. Roman to Integer
- [Leetcode] 13. Roman to Integer
- [leetcode] 13.Roman to Integer
- leetcode 13. Roman to Integer
- leetcode 13. Roman to Integer
- LeetCode 13. Roman to Integer
- [LeetCode]13. Roman to Integer
- Leetcode 13. Roman to Integer
- leetcode 13. Roman to Integer
- leetcode 13. Roman to Integer
- LeetCode *** 13. Roman to Integer
- LeetCode 13. Roman to Integer
- LeetCode 13. Roman to Integer
- 【LeetCode】13. Roman to Integer
- Leetcode 13. Roman to Integer
- LeetCode 13. Roman to Integer
- LSTM
- sublime批量处理excel数据
- JavaSE_22th_抽象类
- JavaScript属性的特性
- 欢迎使用CSDN-markdown编辑器
- LeetCode - 13. Roman to Integer
- 摘要认证
- Android性能优化总结为一下几点和软引用、弱引用详解
- 夕拾算法进阶篇:34)最小生成树Prim(图论)
- Map、Set、List、Queue、Stack的特点与用法1
- 关于Android颜色透明度
- Java编译错误:Cannot reduce the visibility of the inherited method from <class>
- KEIL中逻辑分析仪的使用
- 读取PCD文件