1. 程式人生 > 資訊 >微博:全面排查超話社群榜單分類及名稱,調整超話名稱 2558 個

微博:全面排查超話社群榜單分類及名稱,調整超話名稱 2558 個

題目描述


羅馬數字包含以下七種字元: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
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。