【LeetCode13】【Roman to Integer】

来源:互联网 发布:淘宝网司法房产拍卖 编辑:程序博客网 时间:2024/05/03 08:53

题目:

Given a roman numeral, convert it to an integer.

Input is guaranteed to be within the range from 1 to 3999.

解题方法1:

//第一版本:不知道charAt方法,利用HashMap求解 用时111ms    public static int romanToInt1(String s) {        Map<String,Integer> map = new HashMap<String,Integer>();        map.put("I", 1);        map.put("X",10);        map.put("C",100);        map.put("M",1000);        map.put("V",5);        map.put("L",50);        map.put("D",500);        int integer = 0;        int last = 1;           int i = s.length()-1;        while(i>=0){            String subString = s.substring(i, i+1);            int split = map.get(subString);            if(last>split){integer-=split;}            else{integer+=split;}            last = split;            i--;        }        return integer;         }

解题方法2:

//第一版本:利用charAt求解 用时106mspublic static int romanToInt2(String s) {        int[] num = new int[s.length()];        int last = 0;        int ver = 0;        for(int i=s.length()-1;i>=0;i--){            //注意:"I"是字符串,'I'是char类型,两者是不能通用匹配的            switch(s.charAt(i)){                case 'I':                    num[i] = 1;                    break;                case 'V':                    num[i] = 5;                    break;                case 'X':                    num[i] = 10;                    break;                case 'L':                    num[i] = 50;                    break;                case 'C':                    num[i] = 100;                    break;                case 'D':                    num[i] = 500;                    break;                case 'M':                    num[i] = 1000;                    break;            }            if(num[i]<last){ver-=num[i];last = num[i];}            else {ver+=num[i];last = num[i];}        }        return ver;    }

总结:

这两种方法,看见貌似用时相差(5ms)不多,但排名却从beats 36.88%跳至52.44%,可见代码优化对算法的重要性。当然,目前的代码还有待优化,希望大家能一起讨论,进步。

0 0
原创粉丝点击