zoukankan      html  css  js  c++  java
  • 罗马数字转整数

    我自己的代码:

    roman_num = {'I': 1, 'IV': 4, 'IX': 9, 'V': 5, 'X': 10, 'XL': 40, 'XC': 90, 'L': 50, 'C': 100, 'CD': 400, 'CM': 900, 'D': 500, 'M': 1000}
    num = 'LVIII'
    list_num = []
    i = 0
    while i < len(num):
    if i < len(num)-1:
    str = num[i] + num[i+1]
    if str in roman_num:
    list_num.append(roman_num[str])
    i += 2
    print(str)
    else:
    list_num.append(roman_num[num[i]])
    i += 1
    print(num[i])
    else:
    list_num.append(roman_num[num[i]])
    print(num[i])
    i += 1
    sum1 = 0
    for i in list_num:
    sum1 += i
    print(sum1)



    使用字典




    网上的另一种解法:

    从罗马数字我们可以得出这么一条规律:
    从左往右一位一位的看,如果这一位数字比它右边一位的数字大或与其相等,则加上这一位代表的值,如果它比右边一位小,则减去这一位代表的数字。
    例如: 'MMCMLXIV': 第一位是M,它的后一位也是M,所以 num = 0 + 1000,之后 M > C, num = num + 1000 =2000,之后到特殊值,因为C<M,所以num=num-C =2000-100=1900,之后再加上1000得到 num=2900……以此类推进行下去,最后可得到 num = 2964
    需要注意的是,位与后一位的比较只需进行到倒数第二位即可,因为最后一位没有比它小的一位能够进行比较,直接加上最后一位代表的值即可。

    代码块
    class Solution:
    def romanToInt(self, s: str) -> int:
    roma_nums = {'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':1}
    num = 0
    for i in range(len(s)-1):
    if roma_nums[s[i]]>=roma_nums[s[i+1]]:
    num += roma_nums[s[i]]
    else:
    num -= roma_nums[s[i]]
    last_num = s[len(s)-1]
    num = num + roma_nums[last_num]
    return num

    作者:kanomei
    链接:https://leetcode-cn.com/problems/roman-to-integer/solution/python3-bao-li-jie-fa-by-kanomei/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 相关阅读:
    python闭包和装饰器
    Redis订阅与发布
    Redis压缩列表
    Linux操作系统--定时任务
    python模块--zipfile文件压缩
    Xshell工具使用--连接VMware虚拟机
    Django数据库--事务及事务回滚
    HTTP长连接--Keep-Alive
    MySQL触发器
    Kasaraju算法--强连通图遍历及其python实现
  • 原文地址:https://www.cnblogs.com/hehehe-wy7/p/12720832.html
Copyright © 2011-2022 走看看