zoukankan      html  css  js  c++  java
  • 算法8-----罗马字转整数(分治法)

    1、题目:

    给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。

    字符          数值
    I             1
    V             5
    X             10
    L             50
    C             100
    D             500
    M             1000

    如:

    输入: "XLVIII"
    输出: 48
    解释: X= 10, L = 50,III = 3.【X在L前:XL则表示40】

    2、思路:

    分治法:

    (1)分:对半分【k=len(s)//2】,left=函数(s[:k]),right=函数(s[k:]),

    (2)治:只有一个字符时返回值

    (3)并:分开的部分,如果s【k-1】比s【k】小,结果等于left+right-2*s【k-1】,否则left+right

    代码:

         def romanToInt(s):
            """
            :type s: str
            :rtype: int
            """
            a=['I','V','X','L','C','D','M']
            b=[1,5,10,50,100,500,1000]
            dic=dict(zip(a,b))
            if len(s)==0:
                return 0
            elif len(s)==1:
                return dic[s]
            else:
                k=len(s)//2     
                left=romanToInt(s[:k])
                right=romanToInt(s[k:])
                if dic[s[k-1]]<dic[s[k]]:
                    return left+right-2*dic[s[k-1]]
                else:
                    return left+right
      
  • 相关阅读:
    SQLite Helper
    VS2015
    SQLite connection strings
    DELPHI中四种EXCEL访问技术实现
    jQuery
    JQuery笔记
    一张图明白jenkins和docker作用
    多线程实现的4中方法
    线程池ThreadPoolExecutor分析
    Spring Boot配置文件放在jar外部
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/8963466.html
Copyright © 2011-2022 走看看