(Python)LeetCode 13:罗马数字转整数

题目:

示例:

 

 解题思路:

这道题整体思路其实不难,就是将字符转到对应的数字上,这个可以用字典实现,因为字典的结构是{key,value},那么这里实际上就是把每一个字符对应到字典的值,然后进行加和计算即可,但是这里有一个难点在于,罗马数字会有IV和VI这两个区别,V代表数值5,I代表数值1,但是如果I在V前面,那么IV代表的是5-1=4,而VI代表5+1=6,同样的 IX=10-1=9,而 XI=10+1=11,这里我的方法比较简单,将6中可能的情况直接用条件判断进行判断,但是要注意,这里可能会存在下标超出范围的情况,并且一旦有一个IV这种情况,下标应该是增加2,千万不可以继续 i+1,否则结果是错的,因为我们把 IV 看作一个整体了,这个整体占2个字符。

另外一个要注意的点在于,因为我们这里有 i+2 的情况,所以不能用for i in range的方法,这种方法只能每次增加1,i+2这个语句相当于没用。。所以后来我改成了while来循环。

代码还有需要改进的,这里只是一个非常简单的解题思路,可以给大家参考参考。

代码:

# -- coding: utf-8 --
# @Time : 2021/11/16   8:47
# @Author : ZKK
# @File : 罗马数字转整数.py
#
# I 可以放在 V(5) 和 X(10) 的左边,来表示 4 和 9。
# X 可以放在 L(50) 和 C(100) 的左边,来表示 40 和 90。
# C 可以放在 D(500) 和 M(1000) 的左边,来表示400 和 900。

class Solution:
    def romanToInt(self, s: str):
        dict = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
        sum=0
        i=0
        while i < len(s):  # 用for循环会有问题,i只能一个一个加,不管你是否另外给她加多了都没用,所以要用while循环才可以
            if (i+1)<len(s):  # 判断是否是最后一个字符,最后一个字符肯定没这些情况,直接加上去即可
                if s[i] == 'I' and s[i+1] == 'V':
                    sum += 4
                    i+=2
                elif s[i] == 'I' and s[i+1] == 'X':
                    sum+=9
                    i+=2
                elif s[i] == 'X' and s[i+1] == 'L':
                    sum+=40
                    i+=2
                elif s[i] == 'X' and s[i+1] == 'C':
                    sum+=90
                    i+=2
                elif s[i] == 'C' and s[i+1] == 'D':
                    sum+=400
                    i+=2
                elif s[i] == 'C' and s[i+1] == 'M':
                    sum+=900
                    i+=2
                else:
                    sum+=dict[s[i]]
                    i+=1
            else:
                sum += dict[s[i]]
                i+=1
        return sum

if __name__ == '__main__':
    solution = Solution()
    print(solution.romanToInt("IVVI"))  # 测试用例
    print(solution.romanToInt("IX"))
    print(solution.romanToInt("III"))
    print(solution.romanToInt("LVIII"))
    print(solution.romanToInt("MCMXCIV"))

结果:

 关于LeetCode的解题思路和方法欢迎大家一起讨论~

 

后面还补充了有关Python字典的操作知识,可以作为一个学习参考~

Python字典 相关知识:

d = {key1 : value1, key2 : value2 }

python的字典中,键一般是唯一的,如果重复最后的一个键值对会替换前面的,值不需要唯一。值可以取任何数据类型,但键必须是不可变的,如字符串,数字或元组。一个例子:

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}

向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对如下:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
dict['Age'] = 8 # 更新
dict['School'] = "RUNOOB" # 添加

print "dict['Age']: ", dict['Age']
print "dict['School']: ", dict['School']

输出:   

         dict['Age']: 8

         dict['School']: RUNOOB

python字典能删单一的元素也能清空字典,清空只需一项操作。

显示删除一个字典用del命令,如下:

dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'}
 
del dict['Name']  # 删除键是'Name'的条目
dict.clear()      # 清空字典所有条目
del dict          # 删除字典
 
print "dict['Age']: ", dict['Age'] 
print "dict['School']: ", dict['School']

这会引发一个异常,因为用del后字典不再存在:

 

 

字典的遍历:

a = {'a': '1', 'b': '2', 'c': '3'}
for key in a:
	print(key+':'+a[key])

输出:

        a:1
        b:2
        c:3

或者

a = {'a': '1', 'b': '2', 'c': '3'}
for key in a.keys():
    print(key+':'+a[key])

输出:

        a:1
        b:2
        c:3

有关Python的知识参考 菜鸟教程 Python 字典(Dictionary) | 菜鸟教程

Guess you like

Origin blog.csdn.net/weixin_44260459/article/details/121348988