Integer to Roman

Given an integer, convert it to a roman numeral.

Input is guaranteed to be within the range from 1 to 3999.

解决这道题目的关键在于了解罗马数字的规则。罗马数字共有7个,即I(1),V(5),X(10),L(50),C(100),D(500),M(1000)。相同的1个罗马数字重复几次,就表示这个数的几倍。例如III为3,并且重复的数字不能超过三位。另外一个规则是右加左减规则:在一个较大的罗马数字的右边记上一个较小的罗马数字,表示大数字加小数字。在一个较大的数字的左边记上一个较小的罗马数字,表示大数字减小数字。但是,左减不能跨越一个位数。比如,99不可以用IC表示,而是用XCIX表示。此外,左减数字不能超过1位,比如8写成VIII,而非IIX。同理,右加数字不能超过3位,比如14写成XIV,而非XIIII。

我们用递归来解决这个问题,代码如下:

public class Solution {
public String intToRoman(int num) {
if(num == 0) return "";
if(num >= 1000) return "M" + intToRoman(num - 1000);
if(num >= 900) return "CM" + intToRoman(num - 900);
if(num >= 500) return "D" + intToRoman(num - 500);
if(num >= 400) return "CD" + intToRoman(num - 400);
if(num >= 100) return "C" + intToRoman(num - 100);
if(num >= 90) return "XC" + intToRoman(num - 90);
if(num >= 50) return "L" + intToRoman(num - 50);
if(num >= 40) return "XL" + intToRoman(num - 40);
if(num >= 10) return "X" + intToRoman(num - 10);
if(num >= 9) return "IX" + intToRoman(num - 9);
if(num >= 5) return "V" + intToRoman(num - 5);
if(num >= 4) return "IV" + intToRoman(num - 4);
if(num >= 1) return "I" + intToRoman(num - 1);
return "";
}
}

你可能感兴趣的:(Leetcode)