Skip to content

Commit ed550ec

Browse files
author
luojing
committed
update 0013 solution
1 parent 89c72b4 commit ed550ec

File tree

1 file changed

+13
-0
lines changed

1 file changed

+13
-0
lines changed

src/com/blankj/easy/_0013/LJSolution.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@
1010
*/
1111

1212
public class LJSolution {
13+
/**
14+
* 罗马数字的逻辑
15+
* 0. I=1、V=5、X=10、L=50、C=100、D=500、M=1000;
16+
* 1. 相同数字连写,所表示的数等于这些数字相加得到的数,如III=3;
17+
* 2. 小的数字在大的数字右边,所表示的数等于这些数字相加得到的数,如VIII=8、XII=12;
18+
* 3. 小的数字(仅限I=1、X=10和C=100)在大的数字左边,所表示的数等于大数减小数得到的数,如IV=4、IX=9;
19+
*/
1320
public int romanToInt(String s) {
21+
// 构建罗马数字和阿拉伯数字的映射关系,并存入映射表
1422
Map<Character, Integer> map = new HashMap<>();
1523
map.put('I', 1);
1624
map.put('V', 5);
@@ -19,12 +27,17 @@ public int romanToInt(String s) {
1927
map.put('C', 100);
2028
map.put('D', 500);
2129
map.put('M', 1000);
30+
// 获取罗马数字字符串的长度
2231
int len = s.length();
32+
// 初始化sum,并将最后一个罗马数字值的映射阿拉伯数字赋值给sum
2333
int sum = map.get(s.charAt(len -1));
34+
// 从倒数第二个罗马数字开始,到第一个罗马数字结束,遍历,注意--i,先-1再引用
2435
for (int i = len - 2; i >= 0 ; --i) {
2536
if (map.get(s.charAt(i)) < map.get(s.charAt(i + 1))) {
37+
// 如果左边的[s.charAt(i)]小于右边的[s.charAt(i+1)],sum - 左边的
2638
sum -= map.get(s.charAt(i));
2739
} else {
40+
// 如果左边的[s.charAt(i)]大右边的[s.charAt(i+1)],sum + 左边的
2841
sum += map.get(s.charAt(i));
2942
}
3043
}

0 commit comments

Comments
 (0)