13. 罗马数字转整数
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
| 字符 | I | V | X | L | C | D | M |
| 数值 | 1 | 5 | 10 | 50 | 100 | 500 | 1000 |
通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
-
I可以放在V(5) 和X(10) 的左边,来表示 4 和 9。 -
X可以放在L(50) 和C(100) 的左边,来表示 40 和 90。 -
可以放在
D(500) 和M(1000) 的左边,来表示 400 和 900。
如:s = "MCMXCIV" 输出 1994 (M = 1000, CM = 900, XC = 90, IV = 4)
def romanToInt(s):
"""
:type s: str
:rtype: int
"""
nums = {'I': 1, 'V': 5, 'X': 10, 'L': 50,
'C': 100, 'D': 500, 'M': 1000}
if s == '':
return 0
else:
sum_s = 0
for i in range(len(s)):
if i == 0 or nums[s[i]] <= nums[s[i-1]]:
sum_s += nums[s[i]]
else:
sum_s = sum_s + nums[s[i]] - nums[s[i-1]] * 2
return sum_s
s = "MCMXCIV"
print(romanToInt(s))
延伸:整数转罗马数字
思路:将罗马数字表示的数字均按降序存入列表,输入数字依次相减
def intToRoman(s):
"""
:type s: int
:rtype: str
"""
num = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1]
roman = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']
if s == 0:
return ''
else:
roman_s = ''
for i in range(len(roman)):
if s >= num[i]:
roman_s += roman[i]
s -= num[i]
return roman_s
s = 1994
print(intToRoman(s))
逻辑参考:https://blog.youkuaiyun.com/together_cz/article/details/76725363
202. 快乐数
编写一个算法来判断一个数是不是“快乐数”。
一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和,然后重复这个过程直到这个数变为 1,也可能是无限循环但始终变不到 1。如果可以变为 1,那么这个数就是快乐数。
示例:
输入: 19
输出: true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
方法一:
class Solution:
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
while n != 1:
if n == 4:
return False
else:
x = 0
for i in str(n):
x += int(i)**2
n = x
return True
快乐数规律:来自百度


本文介绍了使用Python3解决LeetCode中的两道题目:13. 罗马数字转整数及其逆问题——整数转罗马数字。详细解析了罗马数字的转换逻辑,并给出了快乐数的定义和判断算法。通过具体示例阐述了数字转换的过程。
1731

被折叠的 条评论
为什么被折叠?



