LeetCode第12题 整数转罗马数字

/*

罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。

字符          数值  I             1  V             5  X             10  L             50  C             100  D             500  M             1000  例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做  XXVII, 即为 XX + V + II 。

通常情况下,罗马数字中小的数字在大的数字的右边。  但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。  同样地,数字 9 表示为 IX。

这个特殊的规则只适用于以下六种情况:

I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。  X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。  C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。  给定一个整数,将其转为罗马数字。输入确保在 1 到 3999 的范围内.

*/
/** * 思路:利用贪心算法。从最大罗马数字开始循环. 时间复杂度是 o(n)  !!!!! 虽然是2重循环,但是时间复杂度是O(n)!!!! */
 1 class Solution12 {
 2
 3   public String intToRoman(int num) {
 4     int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
 5     String[] strs = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
 6     StringBuilder stringBuilder = new StringBuilder();
 7     for (int i = 0; i < values.length; ++i) {
 8       while (num >= values[i]) {
 9         num -= values[i];
10         stringBuilder.append(strs[i]);
11       }
12     }
13
14     return stringBuilder.toString();
15   }
16 }


原文地址:https://www.cnblogs.com/rainbow-/p/10257106.html

时间: 2024-08-29 11:13:42

LeetCode第12题 整数转罗马数字的相关文章

LeetCode 第7题 整数反转

LeetCode 第7题 整数反转 题目描述 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 整体思路 这道题在LeetCode的题目中是非常简单的,尤其是用Python来解决.我们都知道在Python中int类型和str类型是可以相互转换的:int(str) 或者 str(int).因此这道题中,我们仅需要将input中的int类型转换为str类型然后翻转字符串即可. 翻转字符串我们用到的方法是str[::-1].在这个语句中,'-1'指的是step(步长)的意思,取

第12题 数字转为罗马数字

罗马数字采用七个罗马字母作数字.即Ⅰ(1).X(10).C(100).M(1000).V(5).L(50).D(500). 一开始我按照10进制的思想来做,针对不同区间,编辑不同的罗马表达方式,比如1~9,10~90,100~900,1000~3000 以下是代码: public static String intToRoman(int num) { // String roman = ""; if(num<=0) return ""; if(num<=

LeetCode 第七题--整数反转

1. 题目 2.思路 1. 题目 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123输出: 321 示例 2: 输入: -123输出: -321示例 3: 输入: 120输出: 21 2. 思路   python的坑就在于取余,python的-123 %10 为7 -123 %-10 才为-3,还有就是/10 应该转化为int型,其余的就按照一位一位的弹出,然后判断是否溢出就可以了. class Solution: def reverse(sel

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] 12. 整数转罗马数字

12. 整数转罗马数字 字符串处理,题超级简单,读懂题直接开干就行. 基本思路就是从大往小一点一点的来表示,具体看代码把: class Solution { public: string intToRoman(int num) { string ans = ""; int m = 0; m = num / 1000; for (int i = 0; i < m; i++) { ans += 'M'; } num %= 1000; if (num >= 900) { ans

LeetCode 12 Integer to Roman (整数转罗马数字)

题目链接: https://leetcode.com/problems/integer-to-roman/?tab=Description String M[] = {"", "M", "MM", "MMM”};//1000~3000String C[] = {"", "C", "CC", "CCC", "CD", "D&quo

Leetcode第1题:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的 两个 整数.你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素.示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1] Python: nums = [2, 7, 11, 15, 29] target = 17 # print(nums[0]) def calcOrder(n

leetcode中第一题twosum问题解答算法的可行性证明

leetcode中第一题twosum问题解答算法的可行性证明 一.引入 关于leetcode中第一题twosum问题,网上已有不少高人做出过解答,并提出了切实可行的算法实现.我在解答该题时参考了博客http://www.zixue7.com/article-9576-1.html的解答.为让读者更直观地阅读和理解本文,先简要摘录以上博客的内容如下: 题目还原 Two Sum Given an array of integers, find two numbers such that they a

leetcode——Reverse Integer 反转整数数字(AC)

Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 这个题比较简单,考虑特殊情况如12000,注意检查反转后数字是否会越界溢出.代码如下: class Solution { public: int reverse(int x) { bool minus = false; short int splitNum[10]; int i = 0, j = 0; unsign