【leetcode】Roman to Integer 罗马数字换整数
2019-01-31 16:45
393 查看
本人想法比较简单
[code]class Solution { public int romanToInt(String s) { char arr[] = new char[s.length() + 1];//定义一个一维数组存放数据 for (int i = 0; i < s.length(); i++) {//将输入的字符串遍历一遍 arr[i] = s.charAt(i); } int sum = 0; for (int i = 0; i < s.length(); i++) {//判断一个或者两个罗马数字的所对应的值 并加上去 if (arr[i] == 'M') { sum = sum+1000; } else if (arr[i] == 'C') { if (arr[i + 1] == 'M') { sum = sum+900; i++; } else if (arr[i + 1] == 'D') { sum = sum+400; i++; } else { sum = sum+100; } } else if (arr[i] == 'D') { sum = sum+500; } else if (arr[i] == 'X') { if (arr[i + 1] == 'C') { sum = sum+90; i++; } else if (arr[i + 1] == 'L') { sum = sum+40; i++; } else { sum = sum+10; } } else if (arr[i] == 'L') { sum = sum+50; } else if (arr[i] == 'I') { if (arr[i + 1] == 'X') { sum = sum+9; i++; } else if (arr[i + 1] == 'V') { sum = sum+4; i++; } else { sum = sum+1; } } else if (arr[i] == 'V') { sum =sum +5; } } return sum; } }
其他大神的解法 我一步一步分析
case语句解法
[code]public int romanToInt(String s) { int n = s.length(); int roman_int = 0; for(int i=0;i<n;i++) { switch(s.charAt(i)) //定义一个case 语句块 { case 'I' : roman_int = roman_int + 1;break; case 'V' : roman_int = roman_int + 5;break; case 'X' : roman_int = roman_int + 10;break; case 'L' : roman_int = roman_int + 50;break; case 'C' : roman_int = roman_int + 100;break; case 'D' : roman_int = roman_int + 500;break; case 'M' : roman_int = roman_int + 1000;break; default: System.out.println("default");break; } if(i!=0) { if(((s.charAt(i)=='V')||(s.charAt(i)=='X'))&&(s.charAt(i-1)=='I')) roman_int = roman_int-1*2; if(((s.charAt(i)=='L')||(s.charAt(i)=='C'))&&(s.charAt(i-1)=='X')) roman_int = roman_int-10*2; if(((s.charAt(i)=='D')||(s.charAt(i)=='M'))&&(s.charAt(i-1)=='C')) roman_int = roman_int-100*2; } } return roman_int; }
hash码
[code]class Solution { public int romanToInt(String s) {//制作一个hash表 HashMap<Character, Integer> map = new HashMap<Character, Integer>() {{ put('I', 1); put('V', 5); put('X', 10); put('L', 50); put('C', 100); put('D', 500); put('M', 1000); }}; int sum = map.get(s.charAt(s.length() - 1)); for(int i = s.length() - 2; i >= 0; i--) { if(map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) { sum -= map.get(s.charAt(i)); } else { sum += map.get(s.charAt(i)); } } return sum; } }
相关文章推荐
- LeetCode | Integer to Roman(整数转换成罗马数字)
- [C++]LeetCode 12: Integer to Roman(将整数转换为罗马数字)
- (LeetCode) Roman to Integer --- 罗马数字转整数
- leetCode 12.Integer to Roman (整数转罗马数字) 解题思路和方法
- [LeetCode] Roman to Integer 罗马数字转整数
- [LeetCode] Roman to Integer 罗马数字转化成整数
- leetcode:Integer to Roman(整数转化为罗马数字)
- [LeetCode]12. Integer to Roman(整数转化为罗马数字)
- [Leetcode] Roman to integer 罗马数字转成整数
- LeetCode 12 Integer to Roman (整数转罗马数字)
- leetcode-12. Integer to Roman(整数转换成罗马数字)
- LeetCode--Roman to Integer 罗马数字转化成整数
- [LeetCode] Integer to Roman 整数转化成罗马数字
- leetcode-13-罗马数字转整数(roman to integer)-java
- Leetcode 13 Roman to Integer 罗马数字转整数
- 【LeetCode-面试算法经典-Java实现】【013-Roman to Integer (罗马数字转成整数)】
- LeetCode Roman to Integer 罗马数字转阿拉伯数字
- LeetCode OJ 之 Integer to Roman (整数转化为罗马数字)
- LeetCode 12. Integer to Roman(阿拉伯转罗马数字)
- LeetCode-Roman to Integer-罗马数字转十进制