【leetcode】Integer to Roman
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--
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]); } } };
文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”