今天做了Leetcode的一个简单的罗马数字转整数的题目,觉得应该把我的思路写下来。才疏学浅,如有更好的算法望不吝赐教。
/** * 首先将字符串转为字符数组,其次遍历数组,采用switch语句来选择 * 判断罗马数字的六种特殊情况 * 返回结果 */ public class test { public static int Romantoint(String s){ int result=0; char[] chars= s.toCharArray(); for (int i=0;i<chars.length;i++){ switch (chars[i]){ case 'M': result+=1000; break; case 'D': result+=500; break; case 'C': if (i+1<chars.length&&chars[i+1]=='M'){//确保数组不越界以及CM的特殊情况,以下几种情况同理 result+=900; i++;//i++是为了跳过下一个字符,直接去寻找CM下一个字符 }else if (i+1<chars.length&&chars[i+1]=='D'){ result+=400; i++;//同理 }else { result+=100; } break; case 'L': result+=50; break; case 'X': if (i+1<chars.length&&chars[i+1]=='L'){ result+=40; i++; }else if (i+1<chars.length&&chars[i+1]=='C'){ result+=90; i++; }else { result+=10; } break; case 'V': result+=5; break; case 'I': if (i==chars.length-1){//确保数组不越界 result+=1; break; } if (chars[i+1]=='V'){ result+=4; i++; }else if (chars[i+1]=='X'){ result+=9; i++; }else { result+=1; } break; default: break; } } return result; } }