숫자만 포함하는 문자열이 있다고 가정하고 가능한 모든 유효한 IP 주소 조합을 반환하여 문자열을 복원해야 합니다. 유효한 IP 주소는 단일 포인트로 구분된 정확히 4개의 정수(각 정수의 범위는 0~255)로 구성됩니다.
따라서 입력이 "25525511135"와 같으면 출력은 ["255.255.11.135", "255.255.111.35"]
가 됩니다.이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
convertToNum() 함수를 정의하면 s, start, end,
가 필요합니다. -
숫자 :=0
-
initialize i :=start, i <=end, update(i 1씩 증가), −
-
num :=(num * 10) + (s[i] - '0'의 ASCII)
-
숫자> 255이면 -
-
10000 반환
-
-
-
반환 번호
-
addDots() 함수를 정의하면 위치가 지정됩니다.
-
res :=빈 문자열
-
x :=0, posIndex :=0
-
initialize i :=0의 경우, i <위치의 크기일 때 업데이트(i 1만큼 증가), 수행 -
-
num :=위치[i]
-
하나의 문자열 str1 생성
-
temp :=문자열로 된 숫자
-
res :=res + temp
-
i <위치의 크기인 경우 -
-
res :=res 연결 "."
-
-
-
반환 해상도
-
solve() 함수를 정의하면 s, 하나의 문자열 배열 결과, 배열 위치, dotCount, 3으로 초기화, startIndex, 0으로 초기화,
-
dotCount가 0이 아니고 ((size of s - 1) - startIndex + 1) 1이 아닌 경우 -
-
temp :=convertToNum(s, startIndex, s의 크기)
-
temp> =0이고 temp <=255이면 -
-
위치 끝에 온도 삽입
-
res :=addDots(위치)
-
res의 크기가 s의 크기와 같으면 -
-
결과 끝에 res 삽입
-
-
-
반환
-
-
initialize i :=startIndex의 경우, i
-
temp :=convertToNum(s, startIndex, i)
-
temp> =0이고 temp <=255이면 -
-
위치 끝에 온도 삽입
-
해결(s, 결과, 위치, dotCount - 1, i + 1)
-
위치에서 마지막 요소 삭제
-
-
-
하나의 함수 genIp를 정의하면 문자열 s가 필요합니다.
-
배열 결과 정의
-
배열 위치 정의
-
해결(들, 결과, 위치)
-
반환 결과
-
기본 메소드에서 genIp(A)
호출
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } typedef long long int lli; class Solution { public: lli convertToNum(string s,int start, int end){ lli num = 0; for (int i = start; i <= end; i++) { num = (num * 10) + (s[i] - '0'); if (num > 255) return 10000; } return num; } string addDots(vector <int> positions){ string res = ""; int x = 0; int posIndex = 0; for (int i = 0; i < positions.size(); i++) { int num = positions[i]; ostringstream str1; str1 << num; string temp = str1.str(); res += temp; if (i < positions.size() - 1) res += "."; } return res; } void solve(string s, vector <string> &result,vector <int> positions, int dotCount = 3, int startIndex = 0){ if (!dotCount && ((s.size() - 1) - startIndex + 1) >= 1) { int temp = convertToNum(s, startIndex, s.size() - 1); if (temp >= 0 && temp <= 255) { positions.push_back(temp); string res = addDots(positions); if (res.size() - 3 == s.size()) { result.push_back(res); } } return; } for (int i = startIndex; i < s.size(); i++) { int temp = convertToNum(s, startIndex, i); if (temp >= 0 && temp <= 255) { positions.push_back(temp); solve(s, result, positions, dotCount - 1, i + 1); positions.pop_back(); } } } vector<string> genIp(string s){ vector<string> result; vector<int> position; solve(s, result, position); return result; } vector<string> restoreIpAddresses(string A) { return genIp(A); }}; main(){ Solution ob; print_vector(ob.restoreIpAddresses("25525511135")); }
입력
"25525511135"
출력
[255.255.11.135, 255.255.111.35, ]