解題構想-leetcode第12題:整数回転ローマ数字
5480 ワード
解題構想-leetcode第12題:整数回転ローマ数字
タイトルの説明:ローマ数字は以下の7種類の文字を含みます:I、V、X、L、C、DとM.文字値I 1 V 5 X 10 L 50 C 100 D 500 M 1000は、例えば、ローマ数字2をIIと書くと、2つの並列の1となる.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
整数を与え、ローマ数字に変換します.入力は1~3999の範囲であることを確認します.例1:入力:3出力:「III」例2:入力:4出力:「IV」例3:入力:9出力:「IX」例4:入力:58出力:「LVIII」解釈:L=50,V=5,III=3.例5:入力:1994出力:「MCMXCIV」解釈:M=1000、CM=900、XC=90、IV=4.この問題は辞書を使って解題するのに適しています.まず辞書を構築します.1,4,5,9,10,40,50,9010040050900000,1000が含まれています.その後、辞書のkeyを降順に並べ替え、辞書を巡り、各keyについて入力値で除算し、得られた値はこのkeyが使用された回数を表し、そのkeyの値と回数を乗算して文字列に加え、入力をkeyから減算して次のラウンドをループします.最後に文字列を返します.コードは次のとおりです.
提出後、通過します.
タイトルの説明:ローマ数字は以下の7種類の文字を含みます:I、V、X、L、C、DとM.文字値I 1 V 5 X 10 L 50 C 100 D 500 M 1000は、例えば、ローマ数字2をIIと書くと、2つの並列の1となる.12はXIIと書きます.つまりX+IIです.27 XXVIIと書くと、XX+V+IIとなります.通常、ローマ数字の中で小さい数字は大きな数字の右側にあります.しかし、例えば4はIIIではなくIVと書くという特例もある.数字1は数字5の左側にあり、表す数は大数5から小数1を減らした数値4に等しい.同様に、数字9はIXとして表される.この特殊なルールは、次の6つの場合にのみ適用されます.
I V (5) X (10) , 4 9。
X L (50) C (100) , 40 90。
C D (500) M (1000) , 400 900。
整数を与え、ローマ数字に変換します.入力は1~3999の範囲であることを確認します.例1:入力:3出力:「III」例2:入力:4出力:「IV」例3:入力:9出力:「IX」例4:入力:58出力:「LVIII」解釈:L=50,V=5,III=3.例5:入力:1994出力:「MCMXCIV」解釈:M=1000、CM=900、XC=90、IV=4.この問題は辞書を使って解題するのに適しています.まず辞書を構築します.1,4,5,9,10,40,50,9010040050900000,1000が含まれています.その後、辞書のkeyを降順に並べ替え、辞書を巡り、各keyについて入力値で除算し、得られた値はこのkeyが使用された回数を表し、そのkeyの値と回数を乗算して文字列に加え、入力をkeyから減算して次のラウンドをループします.最後に文字列を返します.コードは次のとおりです.
class Solution:
def intToRoman(self, num: int) -> str:
numk={1:'I',
4:'IV',
5:'V',
9:'IX',
10:'X',
40:'XL',
50:'L',
90:'XC',
100:'C',
400:'CD',
500:'D',
900:'CM',
1000:'M' }
res=""
for key in sorted(numk.keys(), reverse=True):
if(num==0):
break
t =num//key
if(t==0):
continue
res+=numk[key]*t
num-=key*t
return res
提出後、通過します.