Leecode12_intToRoman

题目:给定一个数字,将其转为罗马文字
思路:
直接贪心法,先从最大的M开始,如果num比1000大,那么则除以他后再比,如果除后不大于当前标识符,则除以第二大的900,依次下去,直到除到个位 I。类似于找去商店买东西找零。

代码:

std::string Leecode12_intToRoman(int num) {
     
	int values[] = {
      1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 };
	std::string symbols[] = {
      "M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I" };
	std::string result;
	for (int i = 0; i < sizeof(values) / sizeof(values[0]) && num >= 0; i++) {
     
		while (values[i] <= num) {
     
			num -= values[i];
			result.append(symbols[i]);
		}
	}
	return result;
}

另外一种更加快但是不正规的方法:

std::string Leecode12_2_intToRoman(int num) {
     
	std::string thousands[] = {
      "", "M", "MM", "MMM" };
	std::string hundreds[] = {
      "", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM" };
	std::string tens[] = {
      "", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC" };
	std::string ones[] = {
      "", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX" };
	return thousands[num / 1000] + hundreds[num % 1000 / 100] + tens[num % 100 / 10] + ones[num % 10];
}

你可能感兴趣的:(Leecode)