微博:全面排查超話社群榜單分類及名稱,調整超話名稱 2558 個
阿新 • • 發佈:2021-08-28
題目描述
羅馬數字包含以下七種字元:I,V,X,L,C,D和M。
字元 數值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
例如, 羅馬數字 2 寫做II,即為兩個並列的 1。12 寫做XII,即為X+II。 27 寫做XXVII, 即為XX+V+II。
通常情況下,羅馬數字中小的數字在大的數字的右邊。但也存在特例,例如 4 不寫做IIII,而是IV。數字 1 在數字 5 的左邊,所表示的數等於大數 5 減小數 1 得到的數值 4 。同樣地,數字 9 表示為IX。這個特殊的規則只適用於以下六種情況:
I可以放在V(5) 和X(10) 的左邊,來表示 4 和 9。
X可以放在L(50) 和C(100) 的左邊,來表示 40 和90。
C可以放在D(500) 和M(1000) 的左邊,來表示400 和900。
給定一個羅馬數字,將其轉換成整數。輸入確保在 1到 3999 的範圍內。
實現思路:
實現方法比較簡單。主要運用了switch語句進行切分判斷不同的羅馬數字,
需要注意的點在於 判斷陣列下標時要確定其範圍,避免越界
class Solution { public int romanToInt(String s) { char[] luomaChars = s.toCharArray(); int I = 1; int V = 5; int X = 10; int L = 50; int C = 100; int D = 500; int M = 1000; int count = 0; for(int i=luomaChars.length-1;i>=0;i--) { switch (luomaChars[i]) { case 'I': // System.out.println("當前為:"+luomaChars[i]); count = count+I; break; case 'V':
//此處的判斷是為了判斷特俗規則 if(i>0) { if(luomaChars[i-1]=='I') { count = count + V-I; i--; break; } } count = count+V; break; case 'X': if(i>0) { if(luomaChars[i-1]=='I') { count = count + X-I; i--; break; } } count = count+X; break; case 'L': if(i>0) { if(luomaChars[i-1]=='X') { count = count + L-X; i--; break; } } count = count+L; break; case 'C': if(i>0) { if(luomaChars[i-1]=='X') { count = count + C-X; i--; break; } } count = count+C; break; case 'D': if(i>0) { if(luomaChars[i-1]=='C') { count = count + D-C; i--; break; } } count = count+D; break; case 'M': if(i>0) { if(luomaChars[i-1]=='C') { count = count + M-C; i--; break; } } count = count+M; break; default: break; } } return count; } }
測試結果:
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/roman-to-integer
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。