leetcode-12:Integer to Roman整數轉羅馬數字
阿新 • • 發佈:2018-12-22
題目:
Roman numerals are represented by seven different symbols: Symbol Value I 1 V 5 X 10 L 50 C 100 D 500 M 1000 For example, two is written as XII , which is simply X + II . The number twenty seven is written as XXVII , which is XX + V + II . Roman numerals are usually written largest to smallest from left to right. However, the numeral for four is not IV . Because the one is before the five we subtract it making four. The same principle applies to the number nine, which is written as IX . There are six instances where subtraction is used:
Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. Example 1: Input: 3 Output: "III" Example 2: Input: 4 Output: "IV" Example 3: Input: 9 Output: "IX" Example 4: Input: 58 Output: "LVIII" Explanation: L = 50, V = 5, III = 3. Example 5: Input: 1994 Output: "MCMXCIV" Explanation: M = 1000, CM = 900, XC = 90 and IV = 4. |
羅馬數字包含以下七種字元: 字元 數值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, 羅馬數字 2 寫做 通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做
給定一個整數,將其轉為羅馬數字。輸入確保在 1 到 3999 的範圍內。 示例 1: 輸入: 3 輸出: "III" 示例 2: 輸入: 4 輸出: "IV" 示例 3: 輸入: 9 輸出: "IX" 示例 4: 輸入: 58 輸出: "LVIII" 解釋: L = 50, V = 5, III = 3. 示例 5: 輸入: 1994 輸出: "MCMXCIV" 解釋: M = 1000, CM = 900, XC = 90, IV = 4. |
思路:用兩個表,分別從大到小排列,將數字從大到小減下去,減的位置的字串就是最終羅馬數字。
class Solution {
public:
string intToRoman(int num) {
vector<int> n{1000,900,500,400,100,90,50,40,10,9,5,4,1};
vector<string> s{"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV",
"I"};
string ret;
for(int i=0;i<n.size();++i)
{
while(num>=n[i])
{
num-=n[i];
ret+=s[i];
}
}return ret;
}
};