在C ++中还原IP地址
假设我们有一个仅包含数字的字符串,我们必须通过返回所有可能的有效IP地址组合来恢复它。我们知道一个有效的IP地址正好由四个整数(每个整数在0到255之间)组成,并用单点分隔。
因此,如果输入类似于“ 25525511135”,则输出将为[“ 255.255.11.135”,“ 255.255.111.35”]
为了解决这个问题,我们将遵循以下步骤-
定义一个函数
convertToNum()
,它将以s,start,end,num:= 0
对于初始化i:=开始,当i <=结束时,更新(将i增加1),请执行-
回报10000
num:=(num * 10)+(s [i]-ASCII'0')
如果num> 255,则-
返回数字
定义一个函数
addDots()
,它将占据位置,res:=空字符串
x:= 0,posIndex:= 0
对于初始化i:= 0,当i <头寸大小时,进行更新(将i增加1),执行-
res:= res连接“。”
num:=职位[i]
创建一个字符串str1
temp:= num作为字符串
res:= res +温度
如果i <头寸大小,则-
返回资源
定义一个函数
solve()
,它将取s,一个字符串数组结果,一个数组位置,dotCount,将其初始化为3,startIndex,将其初始化为0,如果不是dotCount为非零且((s的大小-1)-startIndex +1)1,则-
将temp插入位置的末尾
res:= addDots(位置)
如果res的大小与s的大小相同,则-
在结果末尾插入res
temp:= convertToNum(s,startIndex,s的大小)
如果temp> = 0且temp <= 255,则-
返回
对于初始化i:= startIndex,当i <s的大小时,更新(将i增加1),执行-
将temp插入位置的末尾
求解(s,结果,位置,dotCount-1,i + 1)
从位置删除最后一个元素
temp:= convertToNum(s,startIndex,i)
如果temp> = 0且temp <= 255,则-
定义一个函数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, ]
以上是 在C ++中还原IP地址 的全部内容, 来源链接: utcz.com/z/348761.html