python 문자열 입력으로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)
제목
숫자로 구성된 문자열을 지정합니다. 이 문자열을 통해 모든 유효한 IP 주소의 조합을 얻을 수 있기를 바랍니다.유효한 IP 주소에 대해 말하자면, 그것은 4개의 숫자로 구성되어야 하며, 각 숫자의 범위는 0에서 255 사이이다.
하나의 문자열은 여러 개의 IP 주소로 바뀔 수 있으며, 우리는 모든 성립할 수 있는 상황을 저장해야 한다.
예제
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
풀다
이 문제의 뜻은 매우 참신하다. 문자열과 IP 주소를 결합시켰다. 그러나 문제의 핵심은 솔직히 말하면 어떤 것은 흔히 말하는 것이다. 모두 하나의 큰 국면을 약간의 작은 국면의 합으로 바꾸는 상황이다.
우리가 이전에 한 모든 배열 문제, 8황후 문제 등은 모두 이렇다. 8황후 문제를 예로 들면 우리가 바둑판에 황후를 놓아야 하는 것 같다.그러나 실제로 우리가 최종적으로 원하는 결과는 여덟 명의 황후를 방치한 후의 국면이다. 이 국면은 모든 황후를 방치한 후의 작은 국면을 조합하여 구성한 것이다.그래서 본질적으로는 작은 국면을 큰 국면으로 조립하는 문제로 볼 수 있다.
이렇게 많이 말했는데 사실은 단지 한 가지 설명하기 위해서이다. 바로 이런 큰 국면에서 작은 국면을 나누는 문제에 부딪히면 우리가 먼저 검색 알고리즘을 고려할 수 있다.검색 알고리즘은 하나의 검색 공간이나 검색 트리에서 해를 찾는 것으로 이해할 수 있을 뿐만 아니라, 작은 국면을 찾을 수 있는 조합으로 이해할 수 있으며, 그것들을 조합하면 우리가 원하는 큰 국면을 구성할 수 있다.
이 문제에 적용하면 마지막으로 우리가 원하는 큰 국면은 합법적인 IP 주소이고 이 큰 국면을 구성하는 작은 국면은 IP 주소를 구성하는 모든 숫자이다.
이것들을 모두 알아낸 후에 코드는 매우 쓰기 쉽다.
class Solution:
def restoreIpAddresses(self, s: str) -> List[str]:
n = len(s)
if n < 4 or n > 12:
return []
ret = []
def dfs(cur, ips):
# , ips 4 ip
#
if cur >= n:
if len(ips) == 4:
ret.append('.'.join(ips[:]))
return
# ip
for i in range(cur, min(cur+3, n)):
# 1 0,
if s[cur] == '0' and i > cur:
return
# ip 255
num = int(s[cur: i+1])
if num > 255:
return
#
ips.append(s[cur: i+1])
dfs(i+1, ips)
ips.pop()
dfs(0, [])
return ret
총결산새로운 아이디어가 있지만 사고방식의 규칙적인 검색 문제는 dfs를 익히고 거슬러 올라가면 어렵지 않다.
오늘의 문장은 여기까지 끝났습니다. 본문을 좋아하신다면 소질 3연렬로 저에게 약간의 지지를 주십시오.
이상은python 입력 문자열로 모든 유효한 IP 주소 생성(LeetCode 93번 문제)에 대한 상세한 내용입니다. 더 많은python IP 주소 생성에 대한 자료는 저희 다른 관련 글을 주목해 주십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.