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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Leetcode | easy】罗马数字转整数

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

題目

羅馬數字包含以下七種字符:I, V, X, L,C,D 和 M。

字符 數值
I1
V5
L50
C100
D500
M1000

例如, 羅馬數字 2 寫做II,即為兩個并列的 1。12 寫做XII ,即為 X + II 。 27 寫做 XXVII , 即為 XX + V + II

通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做 IIII,而是 IV。數字 1 在數字 5 的左邊,所表示的數等于大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為 IX。這個特殊的規則只適用于以下六種情況:

I 可以放在 V (5) 和 X (10) 的左邊,來表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左邊,來表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左邊,來表示 400 和 900。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1 到 3999 的范圍內。

示例 1:

輸入: “III”
輸出: 3

示例 2:

輸入: “IV”
輸出: 4

示例 3:

輸入: “IX”
輸出: 9

示例 4:

輸入: “LVIII”
輸出: 58

解釋: C = 100, L = 50, XXX = 30, III = 3.
示例 5:

輸入: “MCMXCIV”
輸出: 1994

解釋: M = 1000, CM = 900, XC = 90, IV = 4.

思路

  • 思路一(自己的思路):從第一個字母開始判斷,按字符所代表數值進行累加,若字符為C,X,I時,判斷其后一位字符是否為D、M,L、C,V、X,若是,則減去該字符所代表數值,否則加上該字符所代表數值。直到累加到最后一位字符,輸出結果。
  • 思路二:從第一個字母開始,每一次都跟后一位字符比較所代表數值,若存在“反序”,則減去減去該字符所代表數值,否則加上該字符所代表數值。直到累加到最后一位字符,輸出結果。
  • 思路三:構建字典,將7種單子符(即I, V, X, L,C,D 和 M)以及6種特殊組合情況(IV,IX,XL,XC,CD,CM)及其代表數值分別作為key和value放在里面,然后從第一個字符開始判斷,該字符屬于字典中的哪種情況,進行累加。

解答

思路一

class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""s += "0" #標記一下結尾l = len(s)ans = 0for i in range(0,l):print(s[i])if s[i] == 'M':ans += 1000continueif s[i] == 'D':ans += 500continueif s[i] == 'C':if s[i+1] == 'D' or s[i+1] == 'M':ans -= 100else:ans += 100continueif s[i] == 'L':ans += 50continueif s[i] == 'X':if s[i+1] == 'L' or s[i+1] == 'C':ans -= 10else:ans += 10continueif s[i] == 'V':ans += 5continueif s[i] == 'I':if s[i+1] == 'V' or s[i+1] == 'X':ans -= 1else:ans += 1continuereturn ans

思路二

class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""x = {'I':1, 'V':5, 'X':10, 'L':50, 'C':100, 'D':500, 'M':1000}xx = []for i in s:xx.append(x[i])l = len(s)result = 0for i in range(0,l):if i < l - 1:if xx[i] < xx[i+1]:result -= xx[i]else:result += xx[i]result += xx[i]return result

思路三

class Solution:def romanToInt(self, s):""":type s: str:rtype: int"""d = dict(I=1,V=5,X=10,L=50,C=100,D=500,M=1000,XL=40,XC=90,CD=400,CM=900,IV=4,IX=9,)i = 0res = 0while i < len(s):if s[i:i + 2] in d:res += d.get(s[i:i + 2])i += 2else:res += d.get(s[i])i += 1return res

總結

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

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