letcode-13-roman to integer
python:
sum=0
d={'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000}
for i in range(len(s)-1):
if d[s[i]]<d[s[i+1]]:
sum=sum-d.get(s[i])
else:
sum+=d.get(s[i])
sum+=d[s[-1]]
return sum
tips:
range倒序:range(len-1,-1,-1)#从len-1到0
java:
public int romanToInt(String s) {
LinkedHashMap<String, Integer> roman = new LinkedHashMap< String,Integer>();
roman.put("I", 1);
roman.put("V", 5);
roman.put("X", 10);
roman.put("L", 50);
roman.put("C", 100);
roman.put("D", 500);
roman.put("M", 1000);
List<String> index_s =new ArrayList<String> (roman.keySet());
int sum=0;
int b=0;
int flag;
for(int i=s.length()-1;i>=0;i--) {
flag=0;
int a=(int)index_s.indexOf(String.valueOf(s.charAt(i)));/*值,索引*/
if(i-1>=0) {
b=(int)index_s.indexOf(String.valueOf(s.charAt(i-1)));
if(a==b+1) {
sum+=4*Math.pow(10, b/2);
i-=1;
flag=1;
}
if(a==b+2) {
sum+=9*Math.pow(10, b/2);
i-=1;
flag=1;
}
}
if(flag==0) {
int c=roman.get(String.valueOf(s.charAt(i)));
sum+=c;
}
}
return sum;
}
tips:
类似于dict的Map。HashMap(根据key的哈希排序),TreeMap(根据key的值升序),LinkedMap(根据输入顺序)。
初始化:LinkedHashMap<String, Integer> roman = new LinkedHashMap< String,Integer>();
输入:roman.put("I", 1);
键的set:.keySet()
键对应的值: .get(key)
初始化arrayslist:List<String> index_s =new ArrayList<String> (roman.keySet());
list取索引: .indexOf(value)
string取索引对应的值: .charAt(index)
char->string: String.valueOf(s.charAt(i))