您的位置:首页 > 其它

【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;
}
}

 

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: