题目描述
罗马数字转整数,包含以下七种字符: I, V, X, L,C,D 和 M。分别对应1,5,10,50,100,500,1000。
- I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
- X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
- C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
思路
将每一个对应罗马数字转换成数字,一个一个加起来。当小数字在大数字前时,需要减法。
eg:罗马数字IV,就是V-I,即5-1=4,其他正常叠加
难点
数字转换
方法
使用数组,给每一个罗马数字对应下标,每个下标在数组中对应值。
int romanToInt(char * s){
int num[26];// 优点在于利用ASCII码,数组空间尽可能小,也更能理解
num['I' - 'A'] = 1;
num['V' - 'A'] = 5;
num['X' - 'A'] = 10;
num['L' - 'A'] = 50;
num['C' - 'A'] = 100;
num['D' - 'A'] = 500;
num['M' - 'A'] = 1000;
int result = 0, len = strlen(s);
for(int i = 0; i < len; i++){
int value = num[s[i] - 'A'];
if(i < len-1 && value < num[s[i+1] - 'A']){
result -= value;
}else{
result += value;
}
}
return result;
}
java版本(题解中一个很好的思路)
该方法避免了在数字相加时进行判断,直接++
class Solution {
public int romanToInt(String s) {
// 优点在于将6种较为特殊的情况提前转化,在switch中进行判断即可,避免了小数字在大数字前的判断,且减少了switch语句判断的次数。
// 缺点在于当特例足够多时,会变得臃肿,不及+-判断精简
s = s.replace("IV","a");
s = s.replace("IX","b");
s = s.replace("XL","c");
s = s.replace("XC","d");
s = s.replace("CD","e");
s = s.replace("CM","f");
int result = 0;
for(int i = 0;i < s.length(); i++){
result += getValue(s.charAt(i));
}
return result;
}
private int getValue(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;
case 'a' : return 4;
case 'b' : return 9;
case 'c' : return 40;
case 'd' : return 90;
case 'e' : return 400;
case 'f' : return 900;
}
return 0;
}
}
吐槽一下个人代码问题
- 习惯于return 0,导致运行结果不符合预期,多return了一个0
- 大小写问题,V和v的问题,导致ASCII码变化,计算结果不符合预期
本文由 szr 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Sep 14, 2021 at 07:44 pm
https://Renewagen.org/portable-power-stations/ ATGepower
Since its inception, “Sunlit Aiko” has grown into a trusted platform for solar power
enthusiasts globally. Aiko’s engaging writing style combined with her
in-depth knowledge of the solar industry makes her
blog a go-to resource for anyone interested in harnessing
the power of the sun.
https://leotaxil.com/portable-energy-storage-device/ ATGepower
https://Energizenow.online/low-budget-office-light-fixtures-commercial-led-lighting/ ATGepower
Upon graduation, Aiko worked as a Renewable Energy Analyst in one of Japan’s
leading energy firms. However, her desire to share
her knowledge and advocate for solar power led her to leave her corporate job and start her own blog
– “Sunlit Aiko”.
https://ecochargepro.com/camping-batteries/ ATGepower
Aiko’s work goes beyond blogging. She regularly collaborates with renewable energy companies, offering her
insights to help develop more efficient solar technologies.
She also speaks at international conferences, advocating for the widespread adoption of solar power.
Профессиональный сервисный центр по ремонту бытовой техники с выездом на дом.
Мы предлагаем: сервис центры бытовой техники москва
Наши мастера оперативно устранят неисправности вашего устройства в сервисе или с выездом на дом!
https://greenedgepro.com/10-easy-steps-for-home-solar-installation/ ATGepower
Many people believe you have to spend a great deal of money in order to be fashionable. But if you know how to shop and accessorize, you can do it all on a budget. You will learn a lot about finding great styles for less in this article.
To tell GSA Online search engine Ranker just how to obtain target Links, you'll
need to tell it where to look.
Red flat shoes with a red messenger bag are the highlights of daily wear. Red, as a finishing touch, can add a lot of vitality and youthfulness to the overall look. This combination is suitable for women who like simple style, allowing you to stand out from the crowd while maintaining comfort.
|Coloring your hair at summertime is a good way to add some fashion to your ensemble. Make sure, however, that you do what's necessary to maintain the health of your hair. Spend the money on a solid conditioning treatment meant for colored hair, and use it religiously to keep your color pure and your hair looking healthy.