日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文巾解题 13. 罗马数字转整数

發布時間:2025/4/5 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文巾解题 13. 罗马数字转整数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 題目描述

2 解題思路

2.1 模擬

通常情況下,羅馬數字中小的數字在大的數字的右邊。若輸入的字符串滿足該情況,那么可以將每個字符視作一個單獨的值,累加每個字符對應的數值即可。

例如XXVII 可視作 X+X+V+I+I=10+10+5+1+1=27。

若存在小的數字在大的數字的左邊的情況,根據規則需要減去小的數字。對于這種情況,我們也可以將每個字符視作一個單獨的值,若一個數字右側的數字比它大,則將該數字的符號取反。

例如XIV 可視作X?I+V=10?1+5=14。

那么我們就從字符串的串頭開始遍歷,同時我們比較除最后一位以外的其他位與后一位之間的大小。如果當前位羅馬數字對應的數字比后一位的小,那么總的數字結果就減去這一位,否則加上這一位。

class Solution:SYMBOL_VALUES = {'I': 1,'V': 5,'X': 10,'L': 50,'C': 100,'D': 500,'M': 1000,} #每個羅馬數字對應的數字def romanToInt(self, s: str) -> int:ans = 0n = len(s)for i, ch in enumerate(s):value = Solution.SYMBOL_VALUES[ch]if i < n - 1 and value < Solution.SYMBOL_VALUES[s[i + 1]]: #如果當前位比后一位小,那么說明這一位要減掉ans -= valueelse:ans += valuereturn ans

2.2 兩位兩位比較

?大致的思路就是,先把所有可能的值都存入一個字典里面

兩位羅馬數字對應的數字,我們賦值為:兩位羅馬數字應該的值-兩位羅馬數字第一位的值

?

然后我們就累加就可以了

?

dict.get(a,b):如果找得到a的話,返回a的鍵值,否則,返回b

這里我們每次都是檢索當前位置和他前面一個位置兩個元素,拼接起來看在不在字典里面,在的話累加,不在的話,就加上這個位置羅馬數字所對應的值。

?

比如XIV,檢索X的時候,返回10;檢索XI的時候,因為找不到XI這個兩位羅馬數字,返回I的值,1,在檢索IV的時候,有這個鍵值對,所以返回IV3——加上之前I1IV4就計算出來了?

class Solution:def romanToInt(self, s: str) -> int:dic={'I':1,'IV':3,'V':5,'IX':8,'X':10,'XL':30,'L':50,'XC':80,'C':100,'CD':300,'D':500,'CM':800,'M':1000} #所有合法的一位&兩位羅馬數字number=0;for i,n in enumerate(s):number=number+dic.get(s[max(i-1,0):i+1],dic[n]) #如果兩位羅馬數字存在,那么就返回兩位羅馬數字(當前位&前一位)對應的數字 #否則,返回當前位羅馬數字對應的數字return(number)

?

總結

以上是生活随笔為你收集整理的文巾解题 13. 罗马数字转整数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。