zoukankan      html  css  js  c++  java
  • leetcode

    罗马数字转整数

    题目

    罗马数字转整数

    例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II

    思路

    如果从左到右是从大到小,那么全部加起来就好
    否则,如果左边比右边大的,要把左边的数加一个负号
    那么怎么判断是不是左边大于右边呢?
    遍历字符串,基准元素和右边相邻元素比,
    如果左边大于右边,就相加,然后基准元素向右移到下一个元素(刚被加的元素),
    如果基准元素小于右相邻元素,就把右边的这个元素拼一个负号,然后继续相加,且基准元素右移一个
    

    解法一

    class Solution:
    	map_d = {
    		'I': 1,
    		'V': 5,
    		'X': 10,
    		'L': 50,
    		'C': 100,
    		'D': 500,
    		'M': 1000,
    	}
    
    	def romanToInt(self, s: str) -> int:
    		result = 0
    		length = len(s)
    		for index, num in enumerate(s):
    			value = Solution.map_d[num]
    			if index < length - 1 and value < Solution.map_d[s[index + 1]]:
    				result -= value
    			else:
    				result += value
    		return result
    
    

    时间复杂度:O(n)
    执行用时:40 ms
    内存消耗:15 MB

    更多学习笔记移步 https://www.cnblogs.com/kknote
  • 相关阅读:
    洛谷P4175 网络管理
    洛谷P2605 基站选址
    洛谷P3723 礼物
    bzoj3771 Triple
    洛谷P3321 序列统计
    bzoj2194 快速傅里叶之二
    1109课堂内容整理
    响应式网页
    表单隐藏域有什么作用?
    1106课堂笔记
  • 原文地址:https://www.cnblogs.com/kknote/p/15042143.html
Copyright © 2011-2022 走看看