[검 지 offer 솔 문제 노트] 수 치 를 나타 내 는 문자열

1866 단어 Algorithm
제목 설명:
문자열 이 수 치 를 표시 하 는 지 여 부 를 판단 하 는 함 수 를 실현 하 십시오 (정수 와 소수 포함).예 를 들 어 문자열 '+ 100', '5e2', '- 123', '3.1416' 과 '- 1E - 16' 은 모두 수 치 를 나타 낸다.그러나 '12e', '1a 3.14', '1.2.3', '+ - 5', '12e + 4.3' 은 모두 아니다.
 
제목 분석:
이 문 제 는 기본적으로 알고리즘 지식 과 관련 되 지 않 고 주로 여러 가지 상황 에 대한 고려 의 전면 성 을 고찰 한다.
처음 받 았 을 때 대충 봤 더 니 상황 이 극 에 달 할 것 같 았 다.생각 을 정리 한 후에 코드 의 유 니 버 설 성 을 강하 게 해 야 한 다 는 것 을 알 게 되 었 는데 사실은 몇 가지 규칙 으로 요약 할 수 있다.
현재 문자 가 다음 과 같은 경우:
  • 숫자 문자: 계속 검색 하 세 요.
  • 소수점:
  • 첫 번 째 또는 마지막
  • 이 될 수 없습니다.
  • e / E 뒤에 나타 나 면 안 됩 니 다
  • 많 으 면 한 번 만 나타 날 수 있다
  • + / -
  • 1 위 또는 e / E 뒤에 만 나타 날 수 있다
  • e / E
  • 첫 번 째 또는 마지막
  • 이 될 수 없습니다.
  • 많 으 면 한 번 만 나타 날 수 있다

  • 요약 하면 e / E 가 나타 나 면 새로운 시각 적 의미 에서 의 숫자 1 위 를 다시 업데이트 할 수 있 는 기술 이 있 습 니 다. 그 뒤의 문 자 는 새로운 숫자 로 정의 할 수 있 기 때문에 e / E 나 소수점 이 다시 나타 나 면 안 됩 니 다.
     
    AC 코드:
    # -*- coding:utf-8 -*-
    
    class Solution:
        # s   
        def isNumeric(self, s):
            num_end_pos = len(s) - 1
            num_start_pos = 0
            e_mark = False
            dot_mark = False
    
            for i in range(num_end_pos+1):
                num = s[i]
                if num in '+-':
                    if i > num_start_pos: return False
                elif num.isdigit(): continue
                elif num in '.':
                    if not num_start_pos < i < num_end_pos or e_mark or dot_mark: return False
                    else: dot_mark = True
                elif num in 'eE':
                    if not num_start_pos < i < num_end_pos or e_mark: return False
                    else:
                        e_mark = True
                        num_start_pos = i + 1
                else:
                    return False
            return True
    

    좋은 웹페이지 즐겨찾기