Integer to Roman

本贴最后更新于 2259 天前,其中的信息可能已经时移俗易

题目描述

Given an integer, convert it to a roman numeral.

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

把数字转换为罗马数字,数字范围在 1~3999 之间。

解题思路

罗马数字表:

罗马字母 I V X L C D M
阿拉伯数字 1 5 10 50 100 500 1000

对应数字:

类别 罗马数字
0-3 I-III
4 IV
5-8 V-VIII
9 IX

先低位后高位判断当前类别,然后存储在 StringBuilder 内,存储时按类别反向存储。最后把 StringBuilder 翻转。

代码

class Solution {
    public String intToRoman(int num) {
        StringBuilder sb = new StringBuilder();
        char[] roman = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
        for (int i = 0; num > 0; i++) {
            int tmp = num % (int)Math.pow(10, 1);
            num /= Math.pow(10, 1);
            if (tmp < 4) {
                for (int j = 0; j < tmp; j++)
                    sb.append(roman[2*i]);
            } else if (tmp == 4) {
                sb.append(roman[2*i+1]);
                sb.append(roman[2*i]);
            } else if (tmp < 9) {
                for (int j = 0; j < tmp-5; j++) {
                    sb.append(roman[2*i]);
                }
                sb.append(roman[2*i+1]);
            } else {
                sb.append(roman[2*(i+1)]);
                sb.append(roman[2*i]);
            }
        }
        return sb.reverse().toString();
    }
}
  • 算法
    388 引用 • 254 回帖 • 22 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 2 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...