第六周作业1(LeetCode13)
2017-03-28 22:33
330 查看
1. 题目描述(LeetCode13)
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
2. 解决思路
在解决这道题之前应该首先了解罗马的记数方式和组成规则。基本字符:I V X L C D M;相应的阿拉伯数字表示为 1 5 10 50 100 500 1000
(1)相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
(2)小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
(3)小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
(4)正常使用时、连写的数字重复不得超过三次;
(5)在一个数的上面画一条横线、表示这个数扩大 1000 倍。因为题目要求考虑的是[1,3999]这个区间的整数,所以可以暂时不用考虑这条规则。
这题的主要解决思路就是查找匹配。
3. 完整代码
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
2. 解决思路
在解决这道题之前应该首先了解罗马的记数方式和组成规则。基本字符:I V X L C D M;相应的阿拉伯数字表示为 1 5 10 50 100 500 1000
(1)相同的数字连写、所表示的数等于这些数字相加得到的数、如:Ⅲ=3;
(2)小的数字在大的数字的右边、所表示的数等于这些数字相加得到的数、 如:Ⅷ=8、Ⅻ=12;
(3)小的数字(限于 I、X 和 C)在大的数字的左边、所表示的数等于大数减小数得到的数、如:Ⅳ=4、Ⅸ=9;
(4)正常使用时、连写的数字重复不得超过三次;
(5)在一个数的上面画一条横线、表示这个数扩大 1000 倍。因为题目要求考虑的是[1,3999]这个区间的整数,所以可以暂时不用考虑这条规则。
这题的主要解决思路就是查找匹配。
3. 完整代码
import java.util.HashMap; import java.util.Map; import java.util.Scanner; //罗马数字转化成整数 public class RotoIn{ public static void main(String[] args){ RotoIn rti = new RotoIn(); //创建输入对象 @SuppressWarnings("resource") Scanner sc=new Scanner(System.in); //获取用户输入的字符串 String str=null; System.out.print("请输入任意字符:"); str=sc.nextLine(); System.out.println("你输入的字符为:"+str); //rti.romanToInt(str); int result = rti.romanToInt(str); System.out.println("对应的整数为:"+result); } public static int romanToInt(String s) { if (s.length() < 1) return 0; int result = 0; int sub = getRomanValue(s.charAt(0)); int lastv = sub; for (int i = 1; i < s.length(); ++i) { char curc = s.charAt(i); int curv = getRomanValue(curc); 9f9a if (curv == lastv) sub += curv; // 当前一个字符大于当前字符时,情况比较特殊,这个时候,只能讲last包括last的字符算在sub内,相加得到result, // 至于curr还需要根据curr后面的字符判断 else if (curv < lastv) { result += sub; sub = curv; } else { sub = curv - sub; } lastv = curv; } result += sub; return result; } public static int getRomanValue1(char c) { Map<Character, Integer> map = new HashMap<>(); map.put('I', 1); map.put('V', 5); map.put('X', 10); map.put('L', 50); map.put('C', 100); map.put('D', 500); map.put('M', 1000); return map.get(c); } public static int getRomanValue(char c) { 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; } } }
相关文章推荐
- 算法课程第六周Leetcode作业
- 【算法作业13】LeetCode 338. Counting Bits
- Leetcode 673 Number of Longest Increasing Subsequence(第六周作业)
- 第六周作业2(LeetCode 12)
- [leetcode] 第六周作业
- 第六周作业
- Leetcode 207 Course Schedule(第五周作业)
- 第六周作业
- 大学第六周作业
- 第六周作业
- 第六周作业1——利用哈夫曼编码英文字母表
- 第六周作业1——利用哈夫曼编码英文字母表
- 利用哈夫曼编码英文字母表(第六周作业)
- 第六周作业--利用哈夫曼编码英文字母表
- 第三周作业1(LeetCode53)
- leetcode_13(罗马数字变成十进制)
- [Leetcode 17] 13 Roman to Integer
- 13-14寒假作业9
- 13-14寒假作业15
- C语言程序设计课后作业13