Given a roman numeral, convert it to an integer.
Input is guaranteed to be within the range from 1 to 3999.
A:
public class Solution { public int romanToInt(String s) { StringBuffer buf = new StringBuffer(s); // deal with the case that we have 9's , went to 5-1-5 if (buf.indexOf("IX") >= 0) { int i = buf.indexOf("IX"); buf.replace(i, i + 2, "VIV"); } if (buf.indexOf("XC") >= 0) { int i = buf.indexOf("XC"); buf.replace(i, i + 2, "LXL"); } if (buf.indexOf("CM") >= 0) { int i = buf.indexOf("CM"); buf.replace(i, i + 2, "DCD"); } // change 1-5 into 4's if (buf.indexOf("IV") >= 0) { int i = buf.indexOf("IV"); buf.replace(i, i + 2, "IIII"); } if (buf.indexOf("VX") >= 0) { int i = buf.indexOf("VX"); buf.replace(i, i + 2, "VVVV"); } if (buf.indexOf("XL") >= 0) { int i = buf.indexOf("XL"); buf.replace(i, i + 2, "XXXX"); } if (buf.indexOf("LC") >= 0) { int i = buf.indexOf("LC"); buf.replace(i, i + 2, "LLLL"); } if (buf.indexOf("CD") >= 0) { int i = buf.indexOf("CD"); buf.replace(i, i + 2, "CCCC"); } if (buf.indexOf("DM") >= 0) { int i = buf.indexOf("DM"); buf.replace(i, i + 2, "DDDD"); } // calculate them by adding int sum = 0; for (int i = 0; i < buf.length(); i++) { char ch = buf.charAt(i); switch (ch) { case 'M': sum += 1000; break; case 'D': sum += 500; break; case 'C': sum += 100; break; case 'L': sum += 50; break; case 'X': sum += 10; break; case 'V': sum += 5; break; case 'I': sum += 1; break; } } return sum; } }
Mistakes:
1: switch 的case 完了,要记得用break语句。
Learned:
------------------第二遍--------用一个数组来取代那些字母,然后通过对比他们的大小关系来确定加还是减-------
public class Solution { public int romanToInt(String s) { int[] A = new int[s.length()]; for(int i =0;i<s.length();i++){ char ch = s.charAt(i); switch(ch){ case 'M': A[i]=1000; break; case 'D': A[i]=500; break; case 'C': A[i]=100; break; case 'L': A[i]=50; break; case 'X': A[i]=10; break; case 'V': A[i]=5; break; case 'I': A[i]=1; break; } } int sum = 0; for(int i =0;i<A.length;i++){ if(i == A.length -1){// if it is the last one sum += A[i]; break; }else{ if(A[i] * 5 == A[i+1] || A[i] * 10 == A[i+1] ){ sum -= A[i]; sum += A[i+1]; i++; }else{ sum += A[i]; } } } return sum; } }
------------------第二遍, 用HashMap来作---------------
public class Solution { public int romanToInt(String s) { if(s.length() ==0) return 0; StringBuffer buf = new StringBuffer(s); HashMap<Character,Integer> map = new HashMap<Character,Integer>(); map.put('I',1); map.put('V',5); map.put('X',10); map.put('L',50); map.put('C',100); map.put('D',500); map.put('M',1000); int sum = map.get(s.charAt(0)); for(int i=1;i<s.length();i++){ sum += map.get(s.charAt(i)); if(map.get(s.charAt(i)) > map.get(s.charAt(i-1))) sum -= 2* map.get(s.charAt(i-1)); } return sum; } }
No comments:
Post a Comment