题目:
Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
翻译:把罗马转为数字
思路:如果是单纯的一个罗马字母比较好处理,但是对于4,9这样的,应该看它下一个字符代表的数字是不是比他大,要是大的话减去当前的字符代表的数字。要是小的话,则加上这个数字。
像IV ,代表4.当读到I的时候,应该判断下一个字符V和I的关系,V比I代表的数字大,所以此时应该加上V - I的值,然后指针跳过2.
代码1:
public static int romanToInt(String s) {
int num = 0;
String roman[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int number[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
int i = 0; int len = s.length();
while(i < s.length())
{
if(i<s.length()-1&&(C2N(s.charAt(i))<C2N(s.charAt(i+1))))//@ 1
{
num+=C2N(s.charAt(i+1))-C2N(s.charAt(i));
i+=2;
}
else
{
num +=C2N(s.charAt(i));
i++;
}
}
return num;
}
public static int C2N(char c)
{
switch (c) {
case 'I': return 1;
case 'V': return 5;
case 'X': return 10;
case 'L': return 50;
case 'C': return 100;
case 'D': return 500;
case 'M': return 1000;
default: throw new NumberFormatException(
"Error");
}
}
在@1的地方,最初写的时候两个判断条件反着写。结果报错说是越界。后来找了一会才发现。
因为在&&判断的时候,如果前面的为假,后面可以直接跳过,但是如果前面已经报错,那后面的条件也不会看直接跳错。
又是细节的问题。唉
代码2:
public int romanToInt(String s) {
int num = 0;
String roman[]={"M","CM","D","CD","C","XC","L","XL","X","IX","V","IV","I"};
int number[] = {1000,900,500,400,100,90,50,40,10,9,5,4,1};
int i = 0;
while(i<=s.length()-1)
{
switch(s.charAt(i))
{
case 'I':
if(i <s.length()-1&&(s.charAt(i+1)=='V'||s.charAt(i+1)=='X'))
num -=1;
else
num += 1;
break;
case 'V':
num +=5;
break;
case 'X':
if(i < s.length()-1&&(s.charAt(i+1)=='L'||s.charAt(i+1)=='C'))
num -=10;
else
num+=10;
break;
case 'L':
num +=50;
break;
case 'C':
if(i < s.length()-1&&(s.charAt(i+1)=='D'||s.charAt(i+1)=='M'))
num -=100;
else num+=100;
break;
case 'D':
num+=500;
break;
case 'M':
num+=1000;
break;
}
i++;
}
return num;
}
直接把函数整合在一起的写法。看起来不是太简介。还是分开写成函数比较舒服。
分享到:
相关推荐
LeetCode Roman to Integer解决方案
leetcode上Roman to Integer的完整C++代码,已被accepted
13. 罗马数字转整数 Roman to Integer用哈希存储映射字符--->对映的值对字符串的字符挨个判断,考虑下一个字符如果下一个字符大于当前字符,su
c++ c++_c++编程基础之leetcode题解第13题罗马数字转整数
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. If you want a challenge, please do not see below and ask yourself what are the possible input ...
java lru leetcode Fighting for a job! 记录找工作期间搬运的题,全部使用Java实现,本人C++鶸 1 ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...LeetCode ...Integer LeetCode 6 Zi
LeetCode问题13是关于将罗马数字转换为整数的问题。罗马数字由以下七个不同的符号组成:I, V, X, L, C, D 和 M,分别代表1, 5, 10, 50, 100, 500 和 1000。罗马数字的转换规则相对简单,但需要注意的是,如果一个小...
LeetCode问题12是关于“整数转罗马数字”的问题,它要求将一个整数转换为罗马数字表示。罗马数字使用七个不同的符号表示不同的值:I(1)、V(5)、X(10)、L(50)、C(100)、D(500)和M(1000)。为了表示其他...
第321题Reversed_Integer Java中的LeetCode逆整数问题解决方案 问题 - 给定一个有符号的 32 位整数 x,返回 x 其数字颠倒。 如果反转 x 导致值超出有符号的 32 位整数范围 [-231, 231 - 1],则返回 0。 假设环境不...
python python_leetcode面试题解之罗马数字转整数
python python_leetcode面试题解之第13题罗马数字转整数
leetcode-integer_to_roman
Given a 32-bit signed integer, reverse digits of an integer. Java AC版本
java面试 java面试_leetcode面试题解之第13题罗马数字转整数_编程
leetcode中文版 ...罗马数字转整数 number,string 14 Longest Common Prefix 最长公共前缀 string 16 3Sum Closest 最接近的三数之和 two pointers,array 21 Merge Two Sorted Lists 合并两个有序链表 lin
罗马数字转整数 14 Longest Common Prefix 最长公共前缀 20 Valid Parentheses 有效的括号 26 Remove Duplicates from Sorted Array 删除排序数组中的重复项 32 Longest Valid Parentheses 最长有效括号 33 Search ...
leetcode 跳跃 LeetCode Solved by Python easy/middle/hard:15/36/5 1. Two Sum 两数之和 ...Integer ...to Integer ...字符串转换整数 ...Integer to Roman 整数转罗马数字 13. Roman to Integer 罗马数字转
13. Roman to Integer 15. 3Sum 16. 3Sum Closest 17. Letter Combinations of a Phone Number 18. 4Sum 19. Remove Nth Node From End of List 20. Valid Parentheses 21. Merge Two Sorted Lists 22. Generate ...
将整数转换为罗马数字 我目前正在教 AP 计算机科学 A(我的第一年),我选择这个作业是因为我认为我的学生也可以编码。 我们刚刚了解了用户定义的类和 ArrayLists,我想我可以使用这两者来编写代码。 首先,我创建了...
c++ c++_c++编程基础之leetcode题解第12题整数转罗马数字