leetcode 012 —— Integer to Roman

Given an integer, convert it to a roman numeral.

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

知识补充:

I、V、	  X、L、	C、D	和M,分别表示	1、5、	10、50、	100、500	和1000;

思路:依次求千,百,十,个,转换成字符串        下面的方法是枚举,空间复杂度有待完善,更简洁的代码以后附上

class Solution {
public:
string intToRoman(int num) {
	int qian =num/1000;
	int bai = (num - qian * 1000) / 100;
	int shi = (num - qian * 1000 - 100 * bai) / 10;
	int ge = num % 10;

	string s1 (qian, 'M');
	string s2 = fun(bai, 3);
	string s3 = fun(shi, 2);
	string s4 = fun(ge, 1);
	
	string s = s1 + s2 + s3 + s4;
	return s;

}

string fun(int n,int myCase){
	if (n == 0)
		return "";
	vector<string> vec;
	switch(myCase){
	case 1: 	vec = { "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
				break;
	case 2: 	vec = { "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
				break;
	case 3: 	vec = { "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
				break;
	}

	return vec[n - 1];
}

};



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值