题目
简单的模拟题,本来想用if-else写数字和字符的转化,后来想到复习一下map,代码如下:
class Solution {
public int romanToInt(String s) {
int len = s.length();
int[] arr = new int[len];
Map<Character, Integer> map = Map.of('I', 1, 'V', 5,
'X', 10, 'L', 50,
'C', 100, 'D', 500, 'M', 1000);//不可变集合
for (int i = 0; i < len; i ++) {
arr[i] = map.get(s.charAt(i));
}
int ans = arr[len - 1];
for (int i = 1; i < len; i++) {
if (arr[i - 1] < arr[i]) {
arr[i - 1] *= -1;
}
ans += arr[i - 1];
}
return ans;
}
}
复习一下map的几种初始化方法:
1. 最常见的方式
Map<String, String> map = new HashMap<String, Integer>();
map.put("one", 1);
map.put("two", 2);
2.双括号初始化/匿名内部类初始化法
HashMap<String, Integer > map = new HashMap<String, Integer>(){{
put("one", 1);
put("two", 2);
}};
3.最简便的方式
HashMap<String, Integer > map = Map.of("one", 1, "two", 2);
//改变它比如执行put操作会产异常java.lang.UnsupportedOperationException
4.使用ImmutableMap.of
Map<String, Integer > map = ImmutableMap.of("one", 1, "two", 2);
//也可以
Map<String, Integer> map = new ImmutableMap.Builder<String, Integer>()
.put("one", 1)
.put("two", 2)
.build();
//改变它比如执行put操作会产异常java.lang.UnsupportedOperationException
这个题目是简单模拟题,大家也差不多思路,不贴别人代码了。