暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

每日一算法-字符串

每日一Python 2021-03-26
401
今天刷的题是关于字符串的,一个是罗马数字转整数,一个是整数转罗马数字,整体思路很类似。

1.罗马数字转整数

题目

示例

提示:

解题思路

就是将字符串中的字符映射成不同的值,最简单粗暴的方式就是遍历字符串,用case 或者if来判断读入的每个字符,注意一下几个特例;不过可以用一个map来表示字符和数值之间的映射关系,然后在读入的时候,通过字符来获取对应的value,对于特例,题目里也说了是数字小的在数字大的左边,循环的时候用注意判断一下,代码如下:

class Solution:
  def romanToInt(self, s: str) -> int:
      lens = len(s)
      num = 0
      CharToNum = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}
      for i in range(lens):
          if i < (lens -1) and CharToNum[s[i]] < CharToNum[s[i+1]]:
              num -= CharToNum[s[i]] #特例
          else:
              num += CharToNum[s[i]]
      return num

2.整数转罗马数字

题目

示例

解题思路

和上一题反过来,需要有序地查看数字中有几个1000,500,不能用按照上述字典那样建立无序的对应map,可以用两个list分布保存除数和对应的字符,然后不断地循环,注意每次都要更新num

class Solution:
  def intToRoman(self, num: int) -> str:
      s = ''
      n = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5,4, 1]
      c = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL' ,'X', 'IX', 'V', 'IV', 'I']
      for i in range(len(n)):
          m = num // n[i]
          s += m * c[i]
          num = num - m * n[i]
      return s


文章转载自每日一Python,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论