LeetCode(12) - Integer to Roman

  本题的要求是把阿拉伯数字转化成罗马数字,这题唯一的难点,可能就是要了解罗马数字的规则,了解了以后,就没什么难的了。因为罗马数字的规则相对比较复杂,如果想要查看罗马数字的规则,网上有很多资料可以查询。剩下的就是简单的逻辑问题了。做这道题有两个方法,一个是建一个罗马数字初始数组,通过不断调用该数组来构成罗马数字。第二种就是通过不断的判断来完成。这两种方法,第一种较快,但需要一些额外的空间,第二种因为有较多的判断,所以速度要稍稍慢一些,但影响并不大。

  代码如下:

  不建立数组的方法:

 1 public class Solution {
 2     public String intToRoman(int num) {
 3         StringBuilder sb = new StringBuilder();
 4         while (num > 0) {
 5             int value = getRoman(num, sb);
 6             num -= value;
 7         }
 8         return sb.toString();
 9     }
10
11     private int getRoman(int num, StringBuilder sb) {
12         if (num >= 1000) {
13             sb.append(‘M‘);
14             return 1000;
15         }
16         else if (num >= 900) {
17             sb.append(‘C‘);
18             return -100;
19         }
20         else if (num >= 500) {
21             sb.append(‘D‘);
22             return 500;
23         }
24         else if (num >= 400) {
25             sb.append(‘C‘);
26             return -100;
27         }
28         else if (num >= 100) {
29             sb.append(‘C‘);
30             return 100;
31         }
32         else if (num >= 90) {
33             sb.append(‘X‘);
34             return -10;
35         }
36         else if (num >= 50) {
37             sb.append(‘L‘);
38             return 50;
39         }
40         else if (num >= 40) {
41             sb.append(‘X‘);
42             return -10;
43         }
44         else if (num >= 10) {
45             sb.append(‘X‘);
46             return 10;
47         }
48         else if (num >= 9) {
49             sb.append(‘I‘);
50             return -1;
51         }
52         else if (num >= 5) {
53             sb.append(‘V‘);
54             return 5;
55         }
56         else if (num >= 4){
57             sb.append(‘I‘);
58             return -1;
59         }
60         else {
61             sb.append(‘I‘);
62             return 1;
63         }
64     }
65 }

  建立数组的方法:

 1 public class Solution {
 2     public String intToRoman(int num) {
 3         int[] values = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
 4         String[] strs = {"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
 5         StringBuilder sb = new StringBuilder();
 6         for(int i=0;i<values.length;i++) {
 7             while(num >= values[i]) {
 8                 num -= values[i];
 9                 sb.append(strs[i]);
10             }
11         }
12         return sb.toString();
13     }
14 }
时间: 2024-10-06 02:18:54

LeetCode(12) - Integer to Roman的相关文章

LeetCode(12)Integer to Roman

题目 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 分析 该题目要求将给定的1~3999之间的整型数字转换为罗马数字并输出. 解这道题我们必须了解罗马字母与整数之间的对应: 对照举例如下: AC代码 class Solution { public: string intToRoman(int num) { //存储罗马数字 st

leetcode第12题--Integer to Roman

Problem: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 把阿拉伯数字转换为罗马数字输出.百度一下对应的 I V X L C D M,代表1,5,10,50,100,500,1000 然后写一个子函数,输入数字和相应的位数级别,如个位为level 1,千为4.因为最多不会超过四千.所以可以如下.注意了,string用法很好

LeetCode解题报告--Integer to Roman

题目:阿拉伯数字转罗马数字 Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 原题链接地址:https://leetcode.com/problems/integer-to-roman/ 分析:题意将阿拉伯数字num转罗马数字 拼写规则 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(

【LeetCode】012. Integer to Roman

Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 题解: 观察 1 到 10 :Ⅰ,Ⅱ,Ⅲ,Ⅳ(IIII),Ⅴ,Ⅵ,Ⅶ,Ⅷ,Ⅸ,Ⅹ,Ⅺ 难点在于出现字符不能连续超过三次,以及大数左边至多有一个小数.所以要分情况:1 - 3,4,5 - 8,9.将小数在大数左边的情况摘出来. Solution 1 贪心策略 1 class Solut

leetcode笔记:Integer to Roman

一.题目描述 Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from 1 to 3999. 二.题目分析 罗马数字总结: 1~9: {"I", "II", "III", "IV", "V", "VI", "VII", "V

【leetcode】7 integer to roman

整数转换为罗马字符 注意事项: 1 将常用罗马字符保存咋二维数组中,供后期映射查询.存放规则:各位.十位等各一行 2 每次从数字的个位映射,循环直至为0 3 字符串result链接时注意顺序,与普通整数连接顺序不同 class Solution { public:     char*  roman[4][10] = { {"", "I", "II", "III", "IV", "V",

leetCode 12. Integer to Roman | 字符串 | Medium

12. Integer to Roman Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 题目大意: 将一个给定的阿拉伯数字转换成罗马数字. 思路: 这题看到的时候,想的太多. 其实很简单,将千位,百位,十位,个位都表示出来,然后组合即可. 代码如下: class Solution { public:     string int

LeetCode:Integer to Roman

1.题目名称 Integer to Roman (阿拉伯数字到罗马数字的转换) 2.题目地址 https://leetcode.com/problems/integer-to-roman 3.题目内容 英文:Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 中文:给出一个整数,将它转换成罗马数字.输入在1-3999之间. 4.题目分

Integer to Roman leetcode java

题目: Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 to 3999. 题解: 这道题..还有哪个roman to integer..第一件事 就是先把roman认全吧.. 罗马数字拼写规则(转自Wikipedia:http://zh.wikipedia.org/wiki/%E7%BD%97%E9%A9%AC%E6%95%B0%E5%AD%97)