Leetcode:Integer to Roman
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode:Integer to Roman相关的知识,希望对你有一定的参考价值。
问题大意是将整数(1~3999)转换为罗马数字形式,并以字符串的形式返回。至于罗马数字可以参考https://en.wikipedia.org/wiki/Roman_numerals中的说法。
很暴力的解决方案,直接看代码吧,时间复杂度和空间复杂度均为常数,即O(1)。
代码的运行时间是82ms
1 package cn.dalt.leetcode; 2 3 /** 4 * Created by dalt on 2017/6/18. 5 */ 6 public class IntegertoRoman { 7 public String intToRoman(int num) { 8 StringBuilder s = new StringBuilder(); 9 char[] signatures = new char[]{‘I‘, ‘V‘, ‘X‘, ‘L‘, ‘C‘, ‘D‘, ‘M‘, ‘ ‘, ‘ ‘}; 10 int[] valueRepresented = new int[]{1, 5, 10, 50, 100, 500, 1000, 5000, 10000}; 11 for (int i = signatures.length - 1; i >= 0; i -= 2) { 12 int tenPos = i; 13 int fivePos = i - 1; 14 int onePos = i - 2; 15 int oneValue = valueRepresented[onePos]; 16 int value = (num / oneValue) % 10; 17 if (value <= 3) { 18 for (int j = 0; j < value; j++) { 19 s.append(signatures[onePos]); 20 } 21 } else if (value <= 8) { 22 for (int j = 4; j >= value; j--) { 23 s.append(signatures[onePos]); 24 } 25 s.append(signatures[fivePos]); 26 for (int j = 5; j < value; j++) { 27 s.append(signatures[onePos]); 28 } 29 } else { 30 if (value == 9) { 31 s.append(signatures[onePos]); 32 } 33 s.append(signatures[tenPos]); 34 } 35 } 36 return s.toString(); 37 } 38 }
以上是关于Leetcode:Integer to Roman的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode:Integer To Roman(C语言版)
Leetcode:Integer To Roman(C语言版)