diff --git a/include/s0012_integer_to_roman.hpp b/include/s0012_integer_to_roman.hpp new file mode 100644 index 0000000..46d773f --- /dev/null +++ b/include/s0012_integer_to_roman.hpp @@ -0,0 +1,13 @@ +#ifndef S0012_INTEGER_TO_ROMAN +#define S0012_INTEGER_TO_ROMAN + +#include + +using namespace std; + +class Solution { + public: + string intToRoman(int num); +}; + +#endif diff --git a/src/s0012_integer_to_roman.cpp b/src/s0012_integer_to_roman.cpp new file mode 100644 index 0000000..bcb0ed5 --- /dev/null +++ b/src/s0012_integer_to_roman.cpp @@ -0,0 +1,19 @@ +#include "s0012_integer_to_roman.hpp" + +// 贪心哈希表 +// 先硬编码一个哈希表 +// 然后当数值大于一个值的时候,就直接把对应的字符串加上去 + +string Solution::intToRoman(int num) { + int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + string reps[] = {"M", "CM", "D", "CD", "C", "XC", "L", + "XL", "X", "IX", "V", "IV", "I"}; + string res; + for (int i = 0; i < 13; i++) { + while (num >= values[i]) { + num -= values[i]; + res += reps[i]; + } + } + return res; +} diff --git a/tests/s0012_integer_to_roman.cpp b/tests/s0012_integer_to_roman.cpp new file mode 100644 index 0000000..a76d705 --- /dev/null +++ b/tests/s0012_integer_to_roman.cpp @@ -0,0 +1,24 @@ +#include "s0012_integer_to_roman.hpp" + +#include + +TEST(Problem12, Case1) { + int i{3}; + string o("III"); + Solution solution; + EXPECT_EQ(solution.intToRoman(i), o); +} + +TEST(Problem12, Case2) { + int i{58}; + string o("LVIII"); + Solution solution; + EXPECT_EQ(solution.intToRoman(i), o); +} + +TEST(Problem12, Case3) { + int i{1994}; + string o("MCMXCIV"); + Solution solution; + EXPECT_EQ(solution.intToRoman(i), o); +}