[비문] 문자열 정수 변환 -leetcode

제목 : 정수 문자열 변환

 

당신이 기능을 구현하기 위해 atoi 함수, 그것은 문자열을 정수로 변환 할 수 있습니다.

에 첫째, 기능을 기반으로합니다 폐기 쓸모없는 공백 문자로 시작해야하는 지금까지 최초의 비 공백 문자로 찾을 때까지. 다음과 같이 다음 변환 규칙은 다음과 같습니다 :

  1. 첫 번째 문자가 null 이외의 양수 또는 음수 인 경우, 많은 연속적인 숫자가 조합으로와 뒷면의 부호는 부호있는 정수를 형성한다.
  2. 최초의 비 공백 문자가 연속 숫자가 정수를 형성하기 위해 결합 후 바로 숫자 인 경우.
  3. 문자열은 또한 유효 추가 문자의 정수 부분 이후에있을 수 있습니다, 이러한 문자가 무시 될 수있다, 그들은 기능에 영향을 미치지 않습니다.

참고 : 유효한 정수 문자열이 비어 있거나 공백 문자열을 포함하는 최초의 비 공백 문자가 문자열이 아닌 경우하면 함수가 변환이 효과적 일 수 없습니다 변환 할 필요가 없습니다.

함수가 효율적으로 변환 할 수없는 경우 어떤 경우에는, 0이 반환됩니다.

팁 :

이 질문에 공백 문자 ''오직 공백 문자를 포함한다.
우리는 환경, 그 수치 범위를 32 비트 정수 크기를 저장할 수 있다고 가정 [-2 (31)는 2 (31)은  - 1] (2의 값이이 범위를 초과하는 경우, 반환 INT_MAX 31이다  . - 1) 또는 INT_MIN (-2 31이다 ).
 

예 1 :

입력 : "42"
출력 : 42


예 2 :

입력 : "-42"
출력 : -42
설명 : 첫 번째 공백이 아닌 문자는 '-'는 부정적인 표지판입니다.
  우리는 모든 디지털 연속 마이너스 번호와 나중에 최대한 결합, 그리고 마지막으로 -42을 얻을 것이다.


예 3 :

입력 : "4193 단어"
출력 : 4193
설명 : 다음 문자가 숫자가 아니기 때문에, 디지털 OFF '3'으로 변환.


예 4 :

입력 : "단어와 987"
출력 : 0
설명 : 'W'첫 번째 공백이 아닌 문자하지만 양수 또는 음수가 아닙니다.
따라서, 변환을 효과적으로 수행 할 수 없다.


예 5 :

입력 : "-91283472332"
출력 : -2147483648
설명 : 숫자 "-91283472332"32 비트 부호있는 정수의 범위.
  따라서 INT_MIN를 반환 (-2 31이다 ).


질문은 매우 분명 우리가 문자열을 정수로 변환 할 수 있었다.

어려움은 플라스틱 범위를 초과한다는 것이다.

 

우리는 대략 도로이 문제를 해결하려면 다음과 같은 단계로 나누어 :

  1. 쓸모없는 공간 생략
  2. 판사 기호
  3. 디지털 처리

숫자를 다루는, 우리는 범위를 벗어나는 정수 정수 여부를 결정해야합니다 :

  • ANS * 10 + V> INT_MAX

그러나 왼쪽에 표현하고, * 10 + V는 우리가 적절한 변형을 할 수 있도록 가능성, 정수 범위보다 클 수도 있습니다 :

  • ANS> (INT_MAX - V) / 10

따라서, 성형의 범위를 벗어나지 않고 결정될 수있다.

 

코드 (C ++) :

클래스 해결 {
 공개 :
     INT myAtoi ( 문자열 STR) {
         INT I = 0 , = 기호 1. ;
         INT ANS = 0 ; 

        // 공간을 이동 
        그동안을 (STR [I] == '  ' ) ++ I 단계; 

        // 처리 된 심볼 
        IF (STR [I] == ' - ' ) = 로그인 - 1. ,
         IF (STR [I] == ' + ' || STR [I] == ' - ' ) I ++ ; 

        //处理数字
        동안 (STR [I]> = ' 0 ' && STR [I]가 <= ' 9 ' ) {
             INT의 V = STR [I] - ' 0 ' ;
            경우 (ANS> (INT_MAX - V) / 10 ) 반환 서명 == 1 ? INT_MAX : INT_MIN; 
            ANS = ANS * 10 + V; 
            내가 ++ ; 
        } 

        반환 서명 *의 ANS; 
    } 
};

2020-04-03-19 : 48 : 59

 

추천

출처www.cnblogs.com/Sxccz/p/leetcode_14.html