LeetCode 12:整数转罗马数字(Integer to Roman)解法汇总


更多LeetCode题解

My Solution

class Solution {
public:
	vector<string> unit = { "","I","II","III","IV","V","VI","VII","VIII","IX" };
	vector<string> ten = { "","X" , "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
	vector<string> hund = { "","C","CC","CCC","CD","D","DC","DCC","DCCC","CM" };
	vector<string> thou = { "","M","MM","MMM" };
	vector<vector<string>> roman = { unit, ten, hund, thou };
	string intToRoman(int num) {
		if (num < 1 || num>3999) {
			cout << "Input out of range." << endl;
		}
		vector<int> digit;
		while (num) {
			digit.push_back(num % 10);
			num /= 10;
		}
		string res;
		for (int i = digit.size() - 1; i >= 0; i--) {
			res.append(roman[i][digit[i]]);
		}
		return res;
	}
};

勉强算第二种解法吧

其实思想和第一种并没有区别。

public class Solution {
    public String intToRoman(int number) {
        int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
        String[] numerals = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < values.length; i++) {
            while (number >= values[i]) {
                number -= values[i];
                result.append(numerals[i]);
            }
        }
        return result.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值