贾雨村 发表于 2020-11-26 11:58:52

罗马数字转整数

class Solution:
    def romanToInt(self, s: str) -> int:
      f=0
      number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
      special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
      #特殊的六种情况
      temp=s
      for each in special_one:
            if each in s:
                f+=special_one.get(each)
                temp.replace(each,'')
      for each in set(temp):
            A = temp.count(each)
            f += A* number_dict.get(each)
      return f
测试用例:"IV"
测试结果:10
期望结果:4
请问为啥出的结果不对啊

逃兵 发表于 2020-11-26 13:16:19

函数中有两次迭代
      for each in special_one:
            if each in s:
                f+=special_one.get(each)
                temp.replace(each,'')
第一次迭代f=4符合预期
再经历第二次迭代
      for each in set(temp):
            A = temp.count(each)
            f += A* number_dict.get(each)

f变成了10

jtxs0000 发表于 2020-11-26 13:43:08

如果你只是测"IV" 就太简单了
我假设你是测试不同数量的 s
直接用while 就搞定了

number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}

s = list(s)
n = 0
while s:
    if len(s) == 1:
      n += number_dict]
      del s
    elif s+s in special_one:
      n += special_one+s]
      del s[:2]
    else:
      n += number_dict]
      del s
print(n)

稍微改下自己放进类里面去

贾雨村 发表于 2020-11-26 22:45:47

逃兵 发表于 2020-11-26 13:16
函数中有两次迭代

第一次迭代f=4符合预期


f=0
      b=0
      number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
      special_one = {'IV': 4, 'IX': 9, 'XL': 40, 'XC': 90, 'CD': 400, 'CM': 900}
      #特殊的六种情况
      temp=s
      for each in special_one:
            if each in temp:
                f+=special_one.get(each)
                b=temp.replace(each,'')

      for i in set(b):
            A = b.count(i)
            f += A* number_dict.get(i)
      return f
他现在给我报错了 说红色这句话 ‘int’对象不可迭代,但我寻思set()后不是一个列表吗?
这个咋解决啊?

逃兵 发表于 2020-11-27 14:45:35

本帖最后由 逃兵 于 2020-11-27 14:52 编辑

贾雨村 发表于 2020-11-26 22:45
f=0
      b=0
      number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}


按需求重写了份代码
执行逻辑,拆分每一个字母,将每一个字母转化成数字,最后加个0补位
左边数字比右边大的话就减,否则加
class Solution:
    def romanToInt(self, s: str) -> int:
      f = 0
      number_dict={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
      temp = s
      lst = for i in temp]+
      for i in range(len(lst)-1):
            if lst < lst:
                f-=lst
            else:
                f+=lst


      return f
页: [1]
查看完整版本: 罗马数字转整数