具体的题目自己上leetcode看吧
简单说下解决思路哈~
【解决思路】
1、把罗马数字对应的数字放到ArrayList里
2、根据规则,如果后一个数字大于前一个数字,那就把后一个数字减去前一个数字,设为temp,result = result + temp,否则,按顺序加就好了
emmm写出来以后觉得好简单,刚开始想了很多...我还是太菜liao~
package leetcode.easy;
import java.util.ArrayList;
/**
* 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。
* 字符 数值
* I 1
* V 5
* X 10
* L 50
* C 100
* D 500
* M 1000
* 通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。
* 数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4 。
* 同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:
* <p>
* I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
* X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
* C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
* 给定一个罗马数字,将其转换成整数。输入确保在 1 到 3999 的范围内。
*/
public class Solution13 {
/**
* @param s
* @return
*/
public int romanToInt(String s) {
int result = 0;
int temp;
ArrayList<Integer> cuts = new ArrayList<Integer>();
//分割字符串s
for (int i = 0; i < s.length(); i++) {
String letter = s.substring(i, i + 1);
if (letter.equals("I")) {
cuts.add(1);
} else if (letter.equals("V")) {
cuts.add(5);
} else if (letter.equals("X")) {
cuts.add(10);
} else if (letter.equals("L")) {
cuts.add(50);
} else if (letter.equals("C")) {
cuts.add(100);
} else if (letter.equals("D")) {
cuts.add(500);
} else if (letter.equals("M")) {
cuts.add(1000);
} else
return 0;
}
//分割好之后我们就要做正事了,思路是这样的,正序取cuts中的字符
if (s != null) {
//1、如果字符串只有一位,直接输出对应的数字就好
if (cuts.size() == 1) {
return cuts.get(0);
}
//2、如果字符串大于1位
else {
result = cuts.get(0);
for (int i = 1; i < cuts.size(); i++) {
//如果正序读出的字符序号大于前一个,加前两个字符组成的数字
if (cuts.get(i) > cuts.get(i - 1)) {
result = result - cuts.get(i - 1);
temp = cuts.get(i) - cuts.get(i-1);
result = result + temp;
} else {
result = result + cuts.get(i);
}
}
}
}
return result;
}
}