정수에 LeetCode 13. 로마는 아라비아 숫자 로마 숫자를 차례

13. 로마 숫자는 아라비아 숫자를 차례

정수 13. 로마

LeetCode 12 이미지 문제

로마 숫자는 일곱 가지 기호로 표시됩니다 : I, V, X, L, C, DM.

Symbol       Value
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

예를 들어,이 같이 기록 된 II로마 숫자에서, 두 사람의 함께했다. 열두은,로 작성 XII, 단순히이다 X+ II. 스물일곱는 다음과 같이 기록 된 숫자 XXVII입니다 XX+ V+ II.

왼쪽에서 오른쪽으로 로마 숫자는 일반적으로 최소로 최대 기록됩니다. 그러나 네의 숫자는 아니다 IIII. 대신, 네 번째는 다음과 같이 기록됩니다 IV. 하나는 오 전이기 때문에 우리는 넷을 뺍니다. 같은 원리로 기록 된 아홉에 적용됩니다 IX. 뺄셈을 사용하는 여섯 개 경우가 있습니다 :

  • I앞에 배치 될 수있다 V(5) X(4) 및 (9)를 확인 (10).
  • X앞에 배치 될 수있다 L(50) 및 C(40) (90)를 확인 (100).
  • C앞에 배치 될 수있다 D(500) 및 M(400) 및 (900)을 확인 (1000).

로마 숫자를 감안할 때, 정수로 변환합니다. 입력은 1 내지 3999의 범위 내에 있도록 보장한다.

예 1 :

Input: "III"
Output: 3

예 2 :

Input: "IV"
Output: 4

예 3 :

Input: "IX"
Output: 9

예 4 :

Input: "LVIII"
Output: 58
Explanation: L = 50, V= 5, III = 3.

예 5 :

Input: "MCMXCIV"
Output: 1994
Explanation: M = 1000, CM = 900, XC = 90 and IV = 4.
스캔 변환 다음 처음부터

키 아라비아 숫자와 로마 숫자에 따라 매핑을 설정합니다. 단지 전체 문자열을 통해 일단 값이 매핑 관계에 해당하는 아라비아 숫자를 발견하고 함께 추가. 비교 문자 판정로서 IV 로마 숫자 이러한 방식에 대해서는. 작은 문자보다 이전 문자가 의미를 나타내는 경우, 이전 문자의 값은 빼야한다.

class Solution {
    public int romanToInt(String s) {
        Map<Character,Integer> map = new HashMap<Character,Integer>(){{
            put('I',1);
            put('V',5);
            put('X',10);
            put('L',50);
            put('C',100);
            put('D',500);
            put('M',1000);
        }};
        
        int result = map.get(s.charAt(0));
        int sLen = s.length();
        
        for(int i = 1; i < sLen ;i++){
            int pre = map.get(s.charAt(i - 1));
            int cur = map.get(s.charAt(i));
            
            if(cur <= pre){
                result += cur;
            } else {
                result += (cur - 2 * pre);
            }
        }
        
        return result;
        
    }
}
뒷면에서 변환

같은 캔은 앞으로 다시 변환 할. 이 같은 숫자를 다루는 IV는 접근 방식을 채택하고도 그냥 같은. 나는 I, V 직면하고 스윕의 비교에합니다.

class Solution {
    public int romanToInt(String s) {
        Map<Character,Integer> map = new HashMap<Character,Integer>(){{
            put('I',1);
            put('V',5);
            put('X',10);
            put('L',50);
            put('C',100);
            put('D',500);
            put('M',1000);
        }};
        
        int sLen = s.length();
        int result = 0;
        int n = result;
        for(int i = sLen - 1; i >= 0; i--){
            int cur = map.get(s.charAt(i));
            if(cur < n){
                result -= cur;
            } else {
                result += cur;
            }
            n = cur;
        }
        return result;
    }
}
          } else {
                result += cur;
            }
            n = cur;
        }
        return result;
    }
}
게시 36 개 원래 기사 · 원 찬양 8 ·은 30000 +를 볼

추천

출처blog.csdn.net/qq_32763643/article/details/104145031