leetcode 12.IntegertoRoman(整形转罗马数字)

    xiaoxiao2021-04-14  70

    Given an integer, convert it to a roman numeral.

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

    将给定的数字转换为罗马数字,范围为(1~3999)

    罗马数字的组成规则自己网上找

    思路:

    观察可得罗马数字(1~3999)的组成分为4种类型,(1~9)(10~90)(100~900)(1000~3000),本质上讲其实构成规则是一样的,只是字母所代表的大小不同。然后以中间的罗马数字为基础,其他罗马数字放在左边表示减,右边表示加,来表示其数字大小,可发现,只要把给定的int数字进行分位,即千百十个位分开,再找到其对应的罗马数字,之后合并,就能得到该数字代表的罗马数字。

    这里的做法是将int类型的数字转化为字符串类型,这样取位数比较简单,虽然可能效率会差点。

    以下给出代码

    public class Solution { public static final String[][] ROMANLIST = { {"","I","II","III","IV","V","VI","VII","VIII","IX"}, {"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC"}, {"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM"}, {"","M","MM","MMM"} }; public String intToRoman(int num) { if(num > 3999) return null; String numString = String.valueOf(num); String roman = ""; int digit = numString.length(); int digitNum = digit; int loc; while(digit != 0) { switch(digit) { case 4 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[3][loc]; break; case 3 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[2][loc]; break; case 2 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[1][loc]; break; case 1 : loc = numString.charAt(digitNum - digit) - '0'; roman = roman + ROMANLIST[0][loc]; break; default : return null; } digit--; } return roman; } }

    转载请注明原文地址: https://ju.6miu.com/read-670627.html

    最新回复(0)