LeetCode - Integer to Roman

本文介绍了一种将整数转换为罗马数字的算法实现,通过解析数字的每一位,并根据不同区间采用特定规则进行转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://leetcode.com/problems/integer-to-roman/

Given an integer, convert it to a roman numeral.

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

这道题是把输入的数字分成千位数,百位数,十位数,个位数,然后每个部分分成 1-3,4,5-8,9分别处理。

public class Solution {
    public String intToRoman(int num) {
        //I(1)、V(5)、X(10)、L(50)、C(100)、D(500)、M(1000)
        int rank = 1000;
        int index = 6;
        StringBuilder rst = new StringBuilder();
        char[] roman = {'I', 'V', 'X', 'L', 'C', 'D', 'M'};
        while(rank > 0){
            int val = num/rank;
            num = num % rank;
            if(val>=1 && val<=3){
                while(val>0){
                    rst.append(roman[index]);
                    val--;
                } 
            }
            if(val == 4){
                rst.append(roman[index]);
                rst.append(roman[index+1]);
            }
            if(val>=5 && val<=8){
                val -=5;
                rst.append(roman[index+1]);
                while(val>0){
                    rst.append(roman[index]);
                    val--;
                } 
            }
            if(val==9){
                rst.append(roman[index]);
                rst.append(roman[index+2]);
            }
            rank /=10;
            index-=2;
        }
        return rst.toString();
    }
}

其实更直接的方法是,把所有情况都列出来,然后直接用switch来返回相应的值,每位都有9中情况,千位3种,一共30种。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值