Restore IP Addresses
2016-05-03 22:50
417 查看
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given
return
1.我的答案 回溯
class Solution {
public:
void split(vector<string>&res, string s, vector<string>& vec, int num){
int len = s.size();
if(num == 0 && len > 0 && len < 4){
if(s.size()>1 && s[0] == '0')
return;
else{
int temp = atoi(s.c_str());
if(temp <=255 && temp >=0){
string sres = vec[0]+"."+vec[1]+"."+vec[2]+"."+s;
res.push_back(sres);
return;
}
}
}
int i = 1;
while(i <=3 && i < len){
string stemp = s.substr(0,i);
if(stemp.size()>1 && stemp[0] == '0'){//用来判断是否有“010”这种情况出现,出现就删掉
++i;
continue;
}
else{
int sint = atoi(stemp.c_str());
if(sint <= 255 && sint >=0){
vec.push_back(stemp);
string str2 = s.substr(i,len-i);
split(res,str2,vec,num-1);
vec.pop_back();
}
}
++i;
}
return;
}
vector<string> restoreIpAddresses(string s) {
vector<string>res,vec;
int num = 3;
int len = s.size();
if(len < 4 || len > 12)
return res;
split(res,s,vec,num);
return res;
}
};
2.别人的答案,时间一样,就是比我的要整洁
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
string ip;
dfs(s,0,0,ip,result); //paras:string s,start index of s,step(from0-3),intermediate ip,final result
return result;
}
void dfs(string s,int start,int step,string ip,vector<string>& result){
if(start==s.size()&&step==4){
ip.erase(ip.end()-1); //remove the last '.' from the last decimal number
result.push_back(ip);
return;
}
if(s.size()-start>(4-step)*3) return;
if(s.size()-start<(4-step)) return;
int num=0;
for(int i=start;i<start+3;i++){
num=num*10+(s[i]-'0');
if(num<=255){
ip+=s[i];
dfs(s,i+1,step+1,ip+'.',result);
}
if(num==0) break;
}
}
};
For example:
Given
"25525511135",
return
["255.255.11.135", "255.255.111.35"]. (Order does not matter)
1.我的答案 回溯
class Solution {
public:
void split(vector<string>&res, string s, vector<string>& vec, int num){
int len = s.size();
if(num == 0 && len > 0 && len < 4){
if(s.size()>1 && s[0] == '0')
return;
else{
int temp = atoi(s.c_str());
if(temp <=255 && temp >=0){
string sres = vec[0]+"."+vec[1]+"."+vec[2]+"."+s;
res.push_back(sres);
return;
}
}
}
int i = 1;
while(i <=3 && i < len){
string stemp = s.substr(0,i);
if(stemp.size()>1 && stemp[0] == '0'){//用来判断是否有“010”这种情况出现,出现就删掉
++i;
continue;
}
else{
int sint = atoi(stemp.c_str());
if(sint <= 255 && sint >=0){
vec.push_back(stemp);
string str2 = s.substr(i,len-i);
split(res,str2,vec,num-1);
vec.pop_back();
}
}
++i;
}
return;
}
vector<string> restoreIpAddresses(string s) {
vector<string>res,vec;
int num = 3;
int len = s.size();
if(len < 4 || len > 12)
return res;
split(res,s,vec,num);
return res;
}
};
2.别人的答案,时间一样,就是比我的要整洁
class Solution {
public:
vector<string> restoreIpAddresses(string s) {
vector<string> result;
string ip;
dfs(s,0,0,ip,result); //paras:string s,start index of s,step(from0-3),intermediate ip,final result
return result;
}
void dfs(string s,int start,int step,string ip,vector<string>& result){
if(start==s.size()&&step==4){
ip.erase(ip.end()-1); //remove the last '.' from the last decimal number
result.push_back(ip);
return;
}
if(s.size()-start>(4-step)*3) return;
if(s.size()-start<(4-step)) return;
int num=0;
for(int i=start;i<start+3;i++){
num=num*10+(s[i]-'0');
if(num<=255){
ip+=s[i];
dfs(s,i+1,step+1,ip+'.',result);
}
if(num==0) break;
}
}
};
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- 关于指针的一些事情
- android上改变listView的选中颜色
- String.intern
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- PostgreSQL ERROR: invalid escape string 解决办法
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析