【leetcode】IntegertoRoman
2,340 views
0
Question :
Given an integer, convert it to a roman numeral.
Input is guaranteed to be within the range from 1 to 3999.
Anwser 1 :
class Solution { public: string intToRoman(int num) { // Start typing your C/C++ solution below // DO NOT write int main() function string res; string symbol[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"}; int value[]={1000,900,500,400,100,90,50,40,10,9,5,4,1}; int i = 0; while(num != 0){ if(num >= value[i]){ // minus largest number num -= value[i]; res += symbol[i]; } else { i++; } } return res; } };
Anwser 2 :
class Solution { public: string intToRoman(int num) { // Start typing your C/C++ solution below // DO NOT write int main() function char symbol[7] = {'I', 'V', 'X', 'L', 'C', 'D', 'M'}; string res = ""; int scale = 1000; for (int i = 6; i >= 0; i -= 2) { int digit = num / scale; num2roman(digit, res, symbol + i); num %= scale; scale /= 10; } return res; } void num2roman(int num, string& res, char symbols[]) { if (num == 0) return; if (num <= 3) res.append(num, symbols[0]); else if (num == 4) { res.append(1, symbols[0]); res.append(1, symbols[1]); } else if (num <= 8) { res.append(1, symbols[1]); res.append(num - 5, symbols[0]); } else { res.append(1, symbols[0]); res.append(1, symbols[2]); } } };
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2013-04-21 18:41:49
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!