Leetcode 12. 整数からローマ数字へ

6485 ワード

タイトルの説明
ローマ数字には、I、V、X、L、C、D、Mの7文字が含まれています.
              
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はIIIIではなく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の範囲であることを確認します.
構想
数値が与えられた後、対応する数値を高い値から低い値まで順次減算します.その後、対応するローマ数字をつなぎ合わせるといいです.eg: num = 1994, romans = "" num = 1994 - 1000 = 994 romans = "M" num = 994 - 900 = 94 romans = "MCM" num = 94 - 90 = 4 romans = "MCMXC" num = 4 - 4 = 0 romans = "MCMXCIV"
コード#コード#
public String intToRoman(int num) {
	int[] nums = new int[]{1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
	String[] romans = new String[]{"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
	StringBuilder res = new StringBuilder();
	for (int i = 0; i < 13; i++) {
		while (num >= nums[i]) {
			res.append(romans[i]);
			num = num - nums[i];
		}
	}
	return res.toString();
}

普通の考えはこのように感じて、leetcodeが神人の題解があることを見て、みんなに膜拝を参考にさせます:神の題解