前言
除了一题多解,打开视野之外;同一解法的不同角度也会导致程序的运行时间不同,多了解多练习其它思路,打开优化代码的大门。
一、案例
二、题解
1、正向遍历
理清思路就行,用代码把简单思路表达出来就行。
遍历s的每一个字符做相应数字的加法即可;有一种特殊情况:当前值小于下一个值,则需特殊处理。
public class RomanToInt {final static Map<Character, Integer> hash;static {hash &#61; new HashMap<>();hash.put(&#39;I&#39;, 1);hash.put(&#39;V&#39;, 5);hash.put(&#39;X&#39;, 10);hash.put(&#39;L&#39;, 50);hash.put(&#39;C&#39;, 100);hash.put(&#39;D&#39;, 500);hash.put(&#39;M&#39;, 1000);}public int romanToInt(String s) {char[] arr &#61; s.toCharArray();int len &#61; arr.length;int res &#61; 0;for (int i &#61; 0; i < len; ) {int val &#61; hash.get(arr[i]);int next &#61; i &#61;&#61; len - 1 ? 0 : hash.get(arr[i &#43; 1]);if (val >&#61; next) {res &#43;&#61; val;&#43;&#43;i;continue;}res &#43;&#61; next - val;i &#43;&#61; 2;}return res;}
}
2、反向遍历
反向遍历可以优化代码。
遇到比pre小的就减&#xff0c;否则就加&#xff1b;逻辑简单清晰。(在该思路的基础上。)
class RomanToInt2 {final static Map<Character, Integer> hash;static {hash &#61; new HashMap<>();hash.put(&#39;I&#39;, 1);hash.put(&#39;V&#39;, 5);hash.put(&#39;X&#39;, 10);hash.put(&#39;L&#39;, 50);hash.put(&#39;C&#39;, 100);hash.put(&#39;D&#39;, 500);hash.put(&#39;M&#39;, 1000);}public int romanToInt(String s) {char[] arr &#61; s.toCharArray();int len &#61; arr.length;int res &#61; 0, pre &#61; 0;for (int i &#61; len - 1; i >&#61; 0; i--) {int val &#61; hash.get(arr[i]);res &#43;&#61; val < pre ? -val : val;pre &#61; val;}return res;}
}
总结
1&#xff09;除了一题多解&#xff0c;打开视野之外&#xff1b;同一解法的不同方向也会导致程序的运行时间不同&#xff0c;多了解多练习其它思路&#xff0c;打开优化代码的大门。
参考文献
[1]LeetCode 罗马数字转整数