정수에 Leetcode13_ 로마 숫자

이름

I, V, X, L, C, D 및 M. : 다음의 7을 포함하는 로마 숫자 문자

수치 문자
1 I.
V. 5
X-10
L 50
C 100
D 500
M 1,000
즉 1.12 로마 숫자 II로 작성된 예를 들어, 2 개의 평행 XII, 즉 X + II로 기록. 27 XXVII 즉 XX + V + II로 기록.

일반적으로 많은 수의 오른쪽에 로마 숫자의 작은 숫자. 그러나 예를 들어, 4 IIII하지만, IV를 작성하지 않는 예외가 있습니다. 좌측 번호 5 번호 (1), (4) 얻어진 환산 수 5로 표시되는 값과 같은 다수의 수. 마찬가지로, IX 번호 9로 표시된다. 이 특별한 규칙은 다음 육가지 경우에만 적용됩니다 :

I 왼쪽 V (5), X (10)에있을 수 있고,도 4 및도 9를 나타내는.
X의 L은 왼쪽 (50) 및 C (100)에 배치 될 수 있고, 40, 90이 표시된다. 
C 400 및 900로 나타내는 왼쪽으로 D (500) 및 (1000) M에 배치 될 수있다.
정수로 변환, 로마 숫자를 감안할 때. 입력이 1 내지 3999의 범위에 있도록한다.

예 1 :

입력 : "III"
출력 : 3


예 2 :

입력 : "IV"
출력 : 4


예 3 :

입력 : "IX"
출력 : 9


예 4 :

입력 "LVIII"
출력 : 58
설명 : L = 50, V = 5 , III = 3.


예 5 :

입력 : "MCMXCIV"
출력 : 1994


설명 : M = 1000, CM = 900, 90 = XC, IV = 4.

 

생각

즉, 단지 시간 및 라인 문자의 콘트라스트 여섯 가지 경우 만 전류 값이 전자의 후자 만 감산보다 작다라고하는 다른 경우는 가산은

 

코드

. 1 개  솔루션 {
 2  공개 :
 . 3      INT romanToInt ( 문자열 S) {
 . 4          INT 장 = s.size ()
 . 5          INT의 SUM = 0 , 인덱스 = 0 ;
 . 6           (인덱스 = 0 ; 인덱스 ++ ) {
 . 7              IF (색인 chang- == . 1 ) {
 . 8                  SUM + = GetSum (S [인덱스]);주의 때문에 오버플 창, 창을 작성하지 // 인덱스
 . 9                  BREAK ;
 10              }    
 . 11              다른 {
 12은                 경우 (getsum (S [인덱스]) <getsum (S [인덱스 + 1 ]))
 13                      sum- = getsum (S [인덱스]);
14                  다른 
15                      합 + = getsum (S [인덱스]);
16              }
 17                  
18          }   
 19      
20      복귀 합;
21  }
 22          INT getsum ( 문자 c) {
 23              의 INT NUM;
24              스위치 (c) {
 25                  의 경우  ' I는 ' : NUM = 1 ;
(26)                      휴식 ;
27                  의 경우  ' V ' : NUM = 5 ;
(28)                      휴식 ;
29                  의 경우  ' X ' : NUM = 10 ;
(30)                      휴식 ;
31                  의 경우  ' L ' : NUM = 50 ;
32                      체류 ;
33                  의 경우  ' C ' : NUM = 100 ;
34                      체류 ;
35                  의 경우  ' D ' : NUM = 500 ;
36                      체류 ;
37                  의 경우  ' M ' : NUM = 1,000 ;
(38)                      휴식 ;
39                      
(40)              }
 (41)              복귀 NUM;
42          }
 43          
44      
45 };

 

해석 코드

함수와 22-42 라인은 각 문자를 호출하는 함수의 값에 따라 각각의 로마 숫자, 할당, 그리고 마지막으로 납입하는 전화의 돌아갑니다.

 

장 3-21 여행이 입력 로마 문자의 길이를 결정하는 것입니다, 합, 지수는 첨자 문자 위치 현재 총 가치입니다

7-8 인덱스 줄 정도로들에 직접 결합 된 최종 위치 않으며, 우측의 값을 좌우 크기의 비교 값을하지 않고,이 [인덱스]

(11) 사건 때 라인하지 않을 경우 마지막 문자

제 12-13 라인 값이 왼쪽 오른쪽의 값 미만인지 여부를 판단 후, 이하는 좌측의 값을 감산

값의 왼쪽에 14 ~ 15 행은 오른쪽 값보다 크면, 그때는 왼쪽에 가치를 추가 할 수

환원 액 (20)은 다음의 기능을 정의하므로 첫 번째 행 라인 (3)은, 첫 번째 행은 클래스에 속하는 용액이다 마지막 행이 시점에서 중괄호 (21)의 합이다 리턴한다.

 

이득

의 문자열 형식을 때 s.size, 길이는 획득

사용자 정의 함수를 사용하여

이 결함은 하나의 사건 이후 지수 및 케이스 대장로 자신을 발견하기 때문에 구문, 스위치 케이스 문을 포장 할 필요가

이 질문은 서면 나누어 파이썬 사전, 정말 파이썬 어서입니다 최고의 칭찬이다, 그러나 모든 길은 로마로 이어질처럼 자신의 선택을가는 것을 선택

 

이 질문에 6:00 밤 쓰기 시작에서, 단지 쓰기보다는 22시 더 때까지, 놀이터 실행, 운동의 중앙으로 이동합니다. 그러나 운동 후 스스로 다시 코드의 정신이 갑자기 매우 초점을 맞추고, 그들은 신입생 권투 불굴의 낙관적 태도의 종류를 재생하는 시간을 거슬러 여행을 좋아하면 오늘 스포츠는,이 시간은 항상 피해자가 운동 후 은퇴 애도 볼 수 정신, 그래서 내가 귀찮게하지 않습니다, 피해자되었고, 코드 우회 쓰기 두려워하지 않는, 우회 가장 큰 공포 우회이며, 두 단어가 아닌 당나라라는 작품을 기증 같은 일이라고이있다. 삶을 향한 낙관과 긍정적 인 태도의 종류의 생활 문제보다 어려운 방법을 해결하기 어려운 문제를 해결 할 수있는 문제로, 당신은 내가 삶을 사랑 심각하게 생활을해야합니다. 코드를 작성하지만, 나는 무지에서 코드 즐기고 나의 관심과 심각한 사고 과정의 초점이 될, 그래서 다양한 채널을 통해 모든 종류의 정보를 검색, 그것의 느낌을 알게, 나는이 좋아 느낌.

 

원래이 블로그를 작성하는 것보다 22 점 이상이지만, 우리는 게임의 데이터 시각화를 논의 학생들의 새로운 이해의 중간, 나는 기간에 대한 데이터를 찾고 있어요, 그래서 지금까지 나는 3에 대한 지연 한 지연, 작성하지 않은 4 leetcode 제목은, 내일 연료 계속!

 

원래 제목 링크

정수 13. 로마 숫자

 

추천

출처www.cnblogs.com/vocoub/p/11570205.html