Leetcode13--->羅馬數字轉換為整數


 該算法是將羅馬數字轉換為整數,思路如下:比如IXX,使用臨時變量temp保存上一個已經遍歷的羅馬數字,比如:
遍歷時是從后往前遍歷的:
1>  剛開始時,temp = 0; 遍歷當前遍歷到第一個X,則temp == 0 < 10 == X ,則res = 10;temp = 10;
2> 繼續向前遍歷,又遇到X,此時temp == 10 = 10 == X,則 res = res + 10;即res = 20; temp = 10;
3> 繼續向前遍歷,遇到I,此時temp == 10 > 1 == I; 則 res = res - 1; 即res = 19; temp = 1;
循環終止;

1
public class Solution { 2 // 基本思想是根據羅馬數字的特征,即左加右減的規律, 比如IX = 9, XI =11 3 public int romanToInt(String s) { 4 if(s == null || s.length() < 1) 5 return -1; 6 char[] ch = s.toCharArray(); 7 HashMap<Character, Integer> hm = new HashMap<Character, Integer>(); 8 hm.put('I', 1); 9 hm.put('V', 5); 10 hm.put('X', 10); 11 hm.put('L', 50); 12 hm.put('C', 100); 13 hm.put('D', 500); 14 hm.put('M', 1000); 15 int res = 0; 16 int temp = 0; // 臨時變量,保存的是當前遍歷的上一個數值的值 17 int value = 0; // 當前羅馬值的大小 18 for(int i = ch.length - 1; i >= 0; i--) 19 { 20 value = hm.get(ch[i]); 21 if(temp <= value) // 左加 22 { 23 res += value; 24 temp = value; 25 } 26 else // 右減 27 { 28 res -= value; 29 temp = value; 30 } 31 } 32 return res; 33 } 34 } 35   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM