LeetCode--12--medium--IntegerToRoman

summary:

classified discussion

package myapp.kit.leetcode.top200;

/**
 * 12
 * medium
 * https://leetcode.com/problems/integer-to-roman/
 *
 * Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M.
 *
 * Symbol       Value
 * I             1
 * V             5
 * X             10
 * L             50
 * C             100
 * D             500
 * M             1000
 * For example, two is written as II in Roman numeral, just two one's added together. Twelve is written as, XII,
 * which is simply X + II. The number twenty seven is written as XXVII, which is XX + 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 as IV. Because the one is before the five we subtract it making four.
 * The same principle applies to the number nine, which is written as IX. There are six instances where subtraction is used:
 *
 * I can be placed before V (5) and X (10) to make 4 and 9.
 * X can be placed before L (50) and C (100) to make 40 and 90.
 * C can be placed before D (500) and M (1000) to make 400 and 900.
 * Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999.
 *
 * Example 1:
 *
 * Input: 3
 * Output: "III"
 * Example 2:
 *
 * Input: 4
 * Output: "IV"
 * Example 3:
 *
 * Input: 9
 * Output: "IX"
 * Example 4:
 *
 * Input: 58
 * Output: "LVIII"
 * Explanation: L = 50, V = 5, III = 3.
 * Example 5:
 *
 * Input: 1994
 * Output: "MCMXCIV"
 * Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
 *
 *
 *
 * @author huangdingsheng
 * @version 1.0, 2020/6/22
 */
public class IntegerToRoman_12 {

    public static String intToRoman(int num) {
        StringBuilder sb = new StringBuilder();
        int x1 = num / 1000;
        int x2 = (num - x1 * 1000) / 100;
        int x3 = (num - x1 * 1000 - x2 * 100) / 10;
        int x4 = (num - x1 * 1000 - x2 * 100 - x3 * 10) / 1;
        if (x1 > 0) {
            for (int i = 0; i < x1; i++) {
                sb.append("M");
            }
        }
        if (x2 > 0) {
            if (x2 == 9) {
                sb.append("CM");
            }
            if (x2 >= 5 && x2 < 9) {
                sb.append("D");
                for (int i = 0; i < x2 - 5; i++) {
                    sb.append("C");
                }
            }
            if (x2 < 5) {
                if (x2 == 4) {
                    sb.append("CD");
                }
                if (x2 < 4) {
                    for (int i = 0; i < x2; i++) {
                        sb.append("C");
                    }
                }
            }
        }
        if (x3 > 0) {
            if (x3 == 9) {
                sb.append("XC");
            }
            if (x3 >= 5 && x3 < 9) {
                sb.append("L");
                for (int i = 0; i < x3 - 5; i++) {
                    sb.append("X");
                }
            }
            if (x3 < 5) {
                if (x3 == 4) {
                    sb.append("XL");
                }
                if (x3 < 4) {
                    for (int i = 0; i < x3; i++) {
                        sb.append("X");
                    }
                }
            }
        }
        if (x4 > 0) {
            if (x4 == 9) {
                sb.append("IX");
            }
            if (x4 >= 5 && x4 < 9) {
                sb.append("V");
                for (int i = 0; i < x4 - 5; i++) {
                    sb.append("I");
                }
            }
            if (x4 < 5) {
                if (x4 == 4) {
                    sb.append("IV");
                }
                if (x4 < 4) {
                    for (int i = 0; i < x4; i++) {
                        sb.append("I");
                    }
                }
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(intToRoman(100));
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值