[leetcode]Restore IP Addresses
2014-04-21 08:36
411 查看
Restore IP Addresses
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)
解题思路:递归遍历
void push(string &str, int start, int n, string &retStr){ for(int i = 0; i < n; i++){ retStr.push_back(str[start + i]); } } void pop(string &retStr, int n){ for(int i = 0; i < n; i++){ retStr.pop_back(); } } void innserRestoreIP(string str, int start, int dot, string rets, vector<string> & vs){ int slen = str.size(); int gap = slen - start; if(0 == dot){ //如果剩下数字大于3或没有剩,或剩下2个以及以上第一个不能以0开头 if(gap > 3 || 0 == gap || (gap > 1 && '0' == str[start])) return; string s(str, start, gap); if(atoi(s.c_str()) > 255) return; //剩下的数字大于255也不合法 push(str, start, gap, rets); vs.push_back(rets); return; } if(start < slen){ push(str, start, 1, rets); //先取一个字符 rets.push_back('.'); innserRestoreIP(str, start + 1, dot - 1, rets, vs); pop(rets, 2); } if(str[start] != '0'){ //取两或三个字符但不能以0开头 if(start + 1 < slen){ push(str, start, 2, rets); rets.push_back('.'); innserRestoreIP(str, start + 2, dot - 1, rets, vs); pop(rets, 3); } if(start + 2 < slen){ string tmpStr(str, start, 3); if(atoi(tmpStr.c_str()) <= 255){ push(str, start, 3, rets); rets.push_back('.'); innserRestoreIP(str, start + 3, dot - 1, rets, vs); pop(rets, 4); } } } } vector<string> restoreIpAddresses(string s) { vector<string> vs; string rets; innserRestoreIP(s, 0, 3, rets, vs); //源始字符串,下标0,句点的个数 return vs; }
相关文章推荐
- 系统函数
- 主机有线上不了网,无线正常
- Node.js global 变量 (全局命名空间!)
- Linux学习8-Linux常用命令(4)
- java提高篇(四)-----抽象类与接口
- VMware-无法打开内核设备 "\\.\VMCIDev\VMX": 重叠 I/O操作在进行中……
- 如何检查电脑有没被黑客木马入侵
- QT
- vitualbox 虚拟机ubuntu 忘记密码
- 设计模式你怎么看?--代理模式
- python for 语句
- iOS真机调试证书申请流程
- Struts2数据传输的背后机制:ValueStack(值栈)(转载)
- EF学习链接
- c++翻转链表
- 驱动函数笔记
- vitualbox 虚拟机ubuntu安装增强功能
- ASP.NET三层架构网站之创建
- Visual Studio 常用快捷键
- 动态规划之最长公共子序列