最个人网站,开发定制软件开发,泰安企业建站公司流程,网站建设要注册哪些商标类别LeetCode: 罗马数字转整数
一、题目描述 二、分析
方法一#xff1a; 将给定字符串s中的IV, “IX”, “XL”, “XC”, “CD”, “CM” 全部替换为其他字符如#xff1a;a, b, c, d, e, f 这种#xff0c;然后就可以遍历累加了。 s s.replace(IV,…LeetCode: 罗马数字转整数
一、题目描述 二、分析
方法一 将给定字符串s中的IV, “IX”, “XL”, “XC”, “CD”, “CM” 全部替换为其他字符如a, b, c, d, e, f 这种然后就可以遍历累加了。 s s.replace(IV, a);s s.replace(IX, b);s s.replace(XL, c);s s.replace(XC, d);s s.replace(CD, e);s s.replace(CM, f);方法二 按照题目的描述可以总结如下规则
罗马数字由 I,V,X,L,C,D,M 构成当小值在大值的左边则减小值如 IV5-14当小值在大值的右边则加小值如 VI516由上可知右值永远为正因此最后一位必然为正。
在代码实现上可以往后看多一位对比当前位与后一位的大小关系从而确定当前位是加还是减法。当没有下一位时做加法即可。
也可保留当前位的值当遍历到下一位的时对比保留值与遍历位的大小关系再确定保留值为加还是减。最后一位做加法即可。
三、上代码
方法一代码如下
public static int solution2(String s) {s s.replace(IV, a);s s.replace(IX, b);s s.replace(XL, c);s s.replace(XC, d);s s.replace(CD, e);s s.replace(CM, f);//System.out.println(1111 s);int result 0;for (int i 0; i s.length(); i) {int num getInt2(s.charAt(i));result num;}return result;}public static int getInt2(char x) {switch (x) {case a: return 4;case b: return 9;case c: return 40;case d: return 90;case e: return 400;case f: return 900;case I: return 1;case V: return 5;case X: return 10;case L: return 50;case C: return 100;case D: return 500;case M: return 1000;default: return 0;}}
方法二代码如下
public int solution1(String s) {int result 0;int pre getInt1(s.charAt(0));for (int i 1; i s.length(); i) {int num getInt1(s.charAt(i));if (pre num) {result - pre;} else {result pre;}pre num;}result pre;return result;}public int getInt1(char x) {switch (x) {case I: return 1;case V: return 5;case X: return 10;case L: return 50;case C: return 100;case D: return 500;case M: return 1000;default: return 0;}}方法三自己额外想的方法直观解法
public int romanToInt(String s) {int result 0;for (int i 0; i s.length();) {if (s.charAt(i) M) {result result 1000;i;} else if (s.charAt(i) D) {result result 500;i;} else if (s.charAt(i) C) {if ((i 1 s.length() - 1) s.charAt(i1) D) {result result 400;i i 2;} else if ((i 1 s.length() - 1) s.charAt(i1) M) {result result 900;i i 2;} else {result result 100;i;}} else if (s.charAt(i) L) {result result 50;i;} else if (s.charAt(i) X) {if ((i 1 s.length() - 1) s.charAt(i1) L) {result result 40;i i 2;} else if ((i 1 s.length() - 1) s.charAt(i1) C) {result result 90;i i 2;} else {result result 10;i;}} else if (s.charAt(i) V) {result result 5;i;} else if (s.charAt(i) I) {if ((i 1 s.length() - 1) s.charAt(i1) V) {result result 4;i i 2;} else if ((i 1 s.length() - 1) s.charAt(i1) X) {result result 9;i i 2;} else {result result 1;i;}}}return result;}