【LeetCode刷题记录】12. 整数转罗马数字

题目描述:
在这里插入图片描述
在这里插入图片描述
题解:
两种解法,思路都比较简单,第二种比较有意思。
一、暴力法(时间复杂度O(1),空间复杂度O(1))

string intToRoman(int num)
{
 string result;
 vector<string> tmpVec1 = { "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
 vector<string> tmpVec2 = { "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
 vector<string> tmpVec3 = { "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
 vector<string> tmpVec4 = { "", "M", "MM", "MMM" };
 vector<vector<string>> store = { tmpVec1, tmpVec2, tmpVec3, tmpVec4 };
 result.append(store[3][num / 1000 % 10]);
 result.append(store[2][num / 100 % 10]);
 result.append(store[1][num / 10 % 10]);
 result.append(store[0][num % 10]);
 return result;
}

二、贪心法

string intToRoman(int num)
{
 string result;
 vector<int> store = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
 vector<string> strs = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" };
 int storeSize = int(store.size());
 for (int i = 0; i < storeSize; i++)
 {
  while (num >= store[i])
  {
   result.append(strs[i]);
   num -= store[i];
  }
 }
 return result;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值