13. 罗马数字转整数

在这里插入图片描述
题解:
JAVA
// by official
package 罗马数字转整数;

import java.util.HashMap;
import java.util.Map;

public class Solution2 {
public static int romanToInt(String s) {
Map<Character, Integer> symbolValues = 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);
}
};

    System.out.println(symbolValues);

    int ans = 0;
    int n = s.length();
    for (int i = 0; i < n; ++i) {  // s = CMXCIX
        int value = symbolValues.get(s.charAt(i));
        if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
            ans -= value;  // ans = ans - value
        } else {
            ans += value;  // ans = ans + value
        }
    }
    return ans;
}

public static void main(String[] args) {

    System.out.println(romanToInt("XLIX"));
}

}

// by wlq
package 罗马数字转整数;

import java.util.HashMap;

public class Solution {

public static void main(String[] args) {
    String s = "DCXXI";
    String[] member = {"IV", "IX", "XL", "XC", "CD", "CM"};
    int num = 0;
    int num2 = 0;
    HashMap<String, 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);

    for(int i=0; i<member.length; i++){
        boolean status = s.contains(member[i]);
        if(status){
            String s1 = String.valueOf(member[i].charAt(1));
            String s2 = String.valueOf(member[i].charAt(0));
            num2 = map.get(s1) - map.get(s2);
            num = num + num2;
            s = s.replace(member[i], "");
        }

    }

    for(int i=0; i<s.length();i++){
        String s3 = String.valueOf(s.charAt(i)); // str.charAt(i)为char类型要转为String类型
        num = num + map.get(s3);
    }
    System.out.println(s);
    System.out.println(num);
}

}

Python

// by official
class Solution:

SYMBOL_VALUES = {
    'I': 1,
    'V': 5,
    'X': 10,
    'L': 50,
    'C': 100,
    'D': 500,
    'M': 1000,
}

def romanToInt(self, s: str) -> int:
    ans = 0
    n = len(s)
    for i, ch in enumerate(s):
        value = Solution.SYMBOL_VALUES[ch]
        if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]:
            ans -= value
        else:
            ans += value
    return ans

if name == ‘main’:
s = Solution()

print(s.romanToInt("DCXXI"))

// by wlq
class Solution:
def romanToInt(self, s: str) -> int:
num = 0
dic = {
‘I’: 1,
‘V’: 5,
‘X’: 10,
‘L’: 50,
‘C’: 100,
‘D’: 500,
‘M’: 1000
}

    for i in ['IV', 'IX', 'XL', 'XC', 'CD', 'CM']:
        if i in s:
            num2 = dic[i[1]] - dic[i[0]]
            num = num + num2
            s = s.replace(i, '')
    for i in s:
        num = num + dic[i]
    return num

if name == ‘main’:
s = Solution()
print(s.romanToInt(‘DCXXI’))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值