【LeetCode】 13 羅馬數字轉整數
阿新 • • 發佈:2018-12-04
解題思路:
1 很明顯,有兩種字元形式:一個字母和兩個字母,可以進行分別討論。
2 對兩種分別建字典,分別處理。
3 這種方法思路較清晰,但是較慢;較快的思路是對字串連續讀,如果右邊字母表示的數字比左邊的大,則在結果中減去此值,程式碼就不貼了。
程式碼:
class Solution { final static String[] ROMAN = {"M", "D", "C", "L", "X", "V", "I"}; final static String[] ROMAN2 = {"CM", "CD", "XC", "XL", "IX", "IV"}; final static int[] NUMBER = {1000, 500, 100, 50, 10, 5, 1}; final static int[] NUMBER2 = {900, 400, 90, 40, 9, 4}; public int romanToInt(String s) { int result = 0; char[] input = s.toCharArray(); int length = s.length(); boolean flag = false; for (int i = 0;i < length; i++){ flag = false; String tmp = String.valueOf(input[i]); if ((input[i] == 'C'|| input[i] == 'X' || input[i] == 'I') && i != length - 1){ String tmp2 = tmp + input[i+1]; for (int j = 0;j < ROMAN2.length;j++){ if (tmp2.equals(ROMAN2[j])){ result += NUMBER2[j]; i++; flag = true; break; } } } if (flag) continue; for (int k = 0;k < ROMAN.length;k++){ if (tmp.equals(ROMAN[k])){ result += NUMBER[k]; break; } } } return result; } }