ローマへの整数
Leetcode Problem #12 (Medium): Integer to Roman
説明
にジャンプします.Solution Idea || コードJavaScript | Python | Java | C++ )
Roman numerals are represented by seven different symbols:
I
,V
,X
,L
,C
,D
andM
.
Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example,
2
is written asII
in Roman numeral, just two one's added together.12
is written asXII
, which is simplyX + II
. The number27
is written asXXVII
, which isXX + V + II
.Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not
IIII
. Instead, the number four is written asIV
. Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written asIX
. There are six instances where subtraction is used:
I
can be placed beforeV
(5
) andX
(10
) to make4
and9
.X
can be placed beforeL
(50
) andC
(100
) to make40
and90
.C
can be placed beforeD
(500
) andM
(1000
) to make400
and900
.Given an integer, convert it to a roman numeral.
例:
Example 1: Input: num = 3 Output: "III"
Example 2: Input: num = 4 Output: "IV"
Example 3: Input: num = 9 Output: "IX"
Example 4: Input: num = 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3.
Example 5: Input: num = 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
制約
1 <= num <= 3999
考え
にジャンプします.Problem Description || コードJavaScript | Python | Java | C++ )
Randomと整数のように、この問題は最も簡単に数字と数字の間の変換のためのルックアップテーブルを使用して解決されます.この場合、我々は容易に降順で値を扱うことができます、そして、同じ量によって我々の目標数(n)を減らしている間、適切な数字(または数)を我々ができるだけ多くの倍に挿入することができます.
nがなくなると、私たちは広告を返すことができます.
実装
JavaのStringBuilderは、文字列のコピーのオーバーヘッドの一部なしで繰り返し文字列連結の面倒を見ることができます.
JavaScriptコード
にジャンプします.Problem Description || Solution Idea )
const val = [1000,900,500,400,100,90,50,40,10,9,5,4,1]
const rom = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
var intToRoman = function(N) {
let ans = ""
for (let i = 0; N; i++)
while (N >= val[i]) ans += rom[i], N -= val[i]
return ans
};
Pythonコード:
にジャンプします.Problem Description || Solution Idea )
val = [1000,900,500,400,100,90,50,40,10,9,5,4,1]
rom = ["M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"]
class Solution:
def intToRoman(self, N: int) -> str:
ans = ""
for i in range(13):
while N >= val[i]:
ans += rom[i]
N -= val[i]
return ans
Javaコード:
にジャンプします.Problem Description || Solution Idea )
class Solution {
final static int[] val = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
final static String[] rom = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
public String intToRoman(int N) {
StringBuilder ans = new StringBuilder();
for (int i = 0; N > 0; i++)
while (N >= val[i]) {
ans.append(rom[i]);
N -= val[i];
}
return ans.toString();
}
}
C++コード:
にジャンプします.Problem Description || Solution Idea )
class Solution {
public:
const int val[13] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
const string rom[13] = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
string intToRoman(int N) {
string ans = "";
for (int i = 0; N; i++)
while (N >= val[i]) ans += rom[i], N -= val[i];
return ans;
}
};
Reference
この問題について(ローマへの整数), 我々は、より多くの情報をここで見つけました https://dev.to/seanpgallivan/solution-integer-to-roman-1n3oテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol