Restore IP Addresses [Leetcode 解题报告]
来源:互联网 发布:cmd登录mysql数据库 编辑:程序博客网 时间:2024/04/29 13:37
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
For example:
Given “25525511135”,
return [“255.255.11.135”, “255.255.111.35”]. (Order does not matter)
用归并做的,一次把当前串分成两个,继续递归,最后合并。代码如下:
bool valid(string s){ int n=s.length(),temp=0; if(n>3)return false; if(n>1&&s[0]=='0')return false; for(int i=0;i<n;i++){ temp=temp*10+s[i]-'0'; } if(n==3&&temp>255)return false; return true; } vector<string> make(string s,int k){ vector<string> result; string temp=""; if(k==1){ if(!valid(s))return result; result.push_back(s); return result; } else{ int n=s.length(); for(int i=0;i<n-1;i++){ if(i>3*k/2-1||n-1-i>3*k/2)continue; vector<string> left=make(s.substr(0,i+1),k/2); vector<string> right=make(s.substr(i+1,n-i-1),k/2); if(left.size()==0||right.size()==0)continue;; for(int j=0;j<left.size();j++){ for(int k=0;k<right.size();k++){ temp=left[j]+"."+right[k]; result.push_back(temp); } } } return result; } } vector<string> restoreIpAddresses(string s) { return make(s,4); }
还有一种方法就是DFS,leetcode上的结果要比上面的归并(4ms)好一些(0ms),代码如下:
bool valid(string s){ int n=s.length(); if(n>3)return false; if(s[0]=='0'&&n>1)return false; int temp=0; for(int i=0;i<n;i++){ temp=temp*10+s[i]-'0'; } if(temp>255)return false; return true; } void dfs(vector<string> &result,vector<string> &temp,string s,int k){ int len=s.length(); if(k==3){ if(valid(s)){ temp[k]=s; string res=temp[0]+"."+temp[1]+"."+temp[2]+"."+temp[3]; result.push_back(res); } } else{ for(int i=0;i<3&&i<len+k-3;i++){ if(valid(s.substr(0,i+1))&&(len-i-1)>=(3-k)&&(len-1-i)<=3*(3-k)){ temp[k]=s.substr(0,i+1); dfs(result,temp,s.substr(i+1,len-i-1),k+1); } } } } vector<string> restoreIpAddresses(string s) { vector<string> result; vector<string> temp(4,"111"); dfs(result,temp,s,0); return result; }
1 0
- [LeetCode]Restore IP Addresses, 解题报告
- 【LeetCode】Restore IP Addresses 解题报告
- [LeetCode] Restore IP Addresses 解题报告
- Restore IP Addresses [Leetcode 解题报告]
- [leetcode] 93. Restore IP Addresses 解题报告
- [Leetcode] 93. Restore IP Addresses 解题报告
- LeetCode 93. Restore IP Addresses 解题报告
- Leetcode 93. Restore IP Addresses IP地址恢复 解题报告
- LeetCode: Restore IP Addresses
- LeetCode : Restore IP Addresses
- [LeetCode] Restore IP Addresses
- [LeetCode]Restore IP Addresses
- LeetCode:Restore IP Addresses
- LeetCode Restore IP Addresses
- [leetcode] Restore IP Addresses
- LeetCode:Restore IP Addresses
- [LeetCode] Restore IP Addresses
- LeetCode - Restore IP Addresses
- android 保存mp4视频的办法
- Spark Streaming Programming Guide(翻译)
- Android 监听软键盘搜索键
- Leetcode:189. Rotate Array(JAVA)
- cocos2d-x实例学习(9)之CCCardinalSplineBy
- Restore IP Addresses [Leetcode 解题报告]
- 如何动态获取、设置Android控件的宽、高
- win7 writefile写磁盘失败解决
- 使用NUnit进行单元测试
- 在Windows系统上安装OpenSSL及在VS2010中使用OpenSSL
- 十八
- 3年工作经验程序员应有的技能
- 正则表达式判断闰年
- ImageView中XML属性src和background的区别