Restore IP Addresses
2017-02-10 10:36
183 查看
这种带有回溯问题感觉有一种递归解决问题的范式,以此题为例写出自己的题解,自娱自乐,提神醒脑
一个数一组:只要未到达序列终点的下一个.
两个数一组:只要最高位不是0且未到达终点下一个
三个数一组:最高位不是0且未到达终点下一个且数值小于等于255.
递归终止条件:
当到达末尾且恰好构成四组时,该结果就是一个合法地址,存储后并返回.
或者未到达末尾已经构成四组,函数直接返回即可.
题目叙述
xx 给定一个只包含数字的ip地址的字符串,返回所有可能合法的ip地址,例如,输入”25525511135”,程序应该返回: [“255.255.11.135”, “255.255.111.35”].分析
假如当前的状态已经提取了前边的几个数字组成 No 组ip地址(总共四组),那么下一组可能有接下来连续的一个数,两个数,三个数组成一组.下面列出三种情况下继续向下遍历的条件.一个数一组:只要未到达序列终点的下一个.
两个数一组:只要最高位不是0且未到达终点下一个
三个数一组:最高位不是0且未到达终点下一个且数值小于等于255.
递归终止条件:
当到达末尾且恰好构成四组时,该结果就是一个合法地址,存储后并返回.
或者未到达末尾已经构成四组,函数直接返回即可.
代码
class Solution { public: vector<string> restoreIpAddresses(string s) { vector<string> res ; if(s.length()>12||s.length()<4) return res ; string ip = ""; subip(0,0, ip ,s , res); return res; } void subip(int no,int i ,string ip, string &s,vector<string> & res){ if(i == s.length()&&no==4) { res.push_back(ip.substr(1,ip.length())); return ; }else if(no>4)return; subip(no+1,i+1, ip+"."+s[i],s ,res); if(i+1<s.length()&&s[i]>'0') subip(no+1,i+2, ip+"."+s[i]+s[i+1], s,res); if((i+1<s.length()&&i+2<s.length())&&s[i]>'0'&&(s[i]-'0')*100+(s[i+1]-'0')*10+s[i+2]-'0'<=255) subip(no+1,i+3, ip+"."+s[i]+s[i+1] + s[i+2],s ,res); } };
相关文章推荐
- LeetCode: Restore IP Addresses
- LeetCode OJ - Restore IP Addresses
- [Leetcode] Restore IP Addresses
- LeetCode Restore IP Addresses
- Leetcode: Restore IP Addresses
- leetcode 125: Restore IP Addresses (uncompleted)
- 93. Restore IP Addresses
- [LeetCode]题解(python):093-Restore IP Addresses
- [LeetCode] Restore IP Addresses
- Restore IP Addresses
- Restore IP Addresses
- Restore IP Addresses
- leetcode---restore-ip-addresses---dfs
- Restore IP Addresses
- 113_Restore IP Addresses
- LeetCode 93 Restore IP Addresses
- [LeetCode]Restore IP Addresses
- [Leetcode][python]Restore IP Addresses
- LeetCode 093 Restore IP Addresses
- Leetcode(93): Restore IP Addresses