String to Integer (atoi) Java의 문제 해결 방법

간단하게 들릴지 모르지만 이 문제의 목표는 문자열(숫자를 포함하거나 포함하지 않을 수 있음)을 정수로 변환하는 것입니다. 트릭은 가능한 모든 경우를 고려하는 것입니다. 혼동하지 않도록 문제를 해결하는 동안 앞에 나열하는 것이 좋습니다.

Leetcode의 문제 정의







나의 접근
  • 전체 문자열에서 변환할 숫자를 추출하는 빈 문자열 "실제"를 만들었습니다. (혼란을 피하기 위해)
  • 문자열을 반복하면 모든 공백이 무시됩니다. 그러나 현재 반복자가 숫자를 가리키고 다음 문자가 공백이면 루프에서 BREAK해야 합니다.
  • '+' 또는 '-' 기호를 만나면 '실제' 문자열이 비어 있는지 확인해야 합니다. 그렇지 않다면 이 기호는 쓰레기이고 우리는 루프에서 다시 벗어날 것입니다. 그러나 비어 있으면 기호를 저장합니다.
  • 전체 문자열을 반복한 후 숫자를 찾았는지 여부, 즉 "실제"문자열이 비어 있지 않은지 확인해야 합니다. 비어 있으면 0을 반환합니다.

  • 5- "실제"의 첫 번째 문자가 음수 기호인 경우 기호 변수를 -1로 설정합니다.

    6- 이제 "actual"의 나머지 문자를 반복하고 Horner의 규칙을 사용하여 전체 숫자를 정수로 변환합니다.

    7- 숫자가 32비트 범위 내에 있는지 확인합니다.

    (정수.MIN_VALUE <= 숫자 <= 정수.MAX_VALUE)

    public int myAtoi(String s) {
       if(s == null || s.length()==0)
           return 0;
    
       String actual = "";
       long num = 0;
       long sign = 1;
       for(int i = 0 ; i < s.length() ; i++){
           if(s.charAt(i)!=' '){
               if( actual.length() == 0 && i+1 < s.length()
                  && (s.charAt(i) == '-' || s.charAt(i) == '+') 
                  && Character.isDigit(s.charAt(i+1)))
                   actual += s.charAt(i);
    
               else if(!Character.isDigit(s.charAt(i)))
                   break;
               else if(Character.isDigit(s.charAt(i)))
                   actual += s.charAt(i);
    
               if(i+1 < s.length() && s.charAt(i+1)==' ')
                   break;
    
           }
       }
    
      if(actual.length() == 0)
          return 0;
      if(actual.charAt(0) == '-')
          sign = -1;
    
      for(int i=0; i<actual.length(); i++){
          if(Character.isDigit(actual.charAt(i))){
              num = num*10 + (actual.charAt(i) - '0');
              if(num*sign >= Integer.MAX_VALUE)
                  return Integer.MAX_VALUE;
              else if( num*sign <= Integer.MIN_VALUE)
                  return Integer.MIN_VALUE;
          }
      }
    
     return (int) (num*sign);
    }
    

    언제든지 저에게 연락하셔서 여러분의 생각을 알려주세요!

    Github
    Medium

    좋은 웹페이지 즐겨찾기