93. Restore IP Addresses
来源:互联网 发布:cf刷等级软件 编辑:程序博客网 时间:2024/06/05 14:28
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)
思路1:回溯法
bool validSub(string& sub){ //注意在此判断若首字母为0,则一定是“0”才合法 if (sub[0] == '0') return sub == "0"; int res = stoi(sub); //字符串转int return res <= 255 && res > 0;}void helper(string s, int count, string sub, vector<string>&result){ if (count == 3 && validSub(s)){ result.push_back(sub + s); return; } for (int i = 1; i <= 3 && i < s.size(); i++){ string strstr = s.substr(0, i); if (validSub(strstr)){ helper(s.substr(i), count + 1, sub + strstr + ".", result); } }}vector<string> restoreIpAddresses(string s) { vector<string> result; if (s.empty() || s.size()<4 || s.size()>12) return result; helper(s, 0, "", result); return result;}
思路2:直接循环判断
bool validSub(string& sub){ //注意在此判断若首字母为0,则一定是“0”才合法 if (sub[0] == '0') return sub == "0"; int res = stoi(sub); //字符串转int return res <= 255 && res > 0;}vector<string> restoreIpAddresses1(string s) { vector<string> result; if (s.empty() || s.size()<4 || s.size()>12) return result; for (int i = 0; i < s.size(); i++){ for (int j = i + 1; j < s.size(); j++){ for (int k = j + 1; k < s.size(); k++){ string ip1 = s.substr(0, i + 1); string ip2 = s.substr(i + 1, j - i); string ip3 = s.substr(j + 1, k - j); string ip4 = s.substr(k + 1); if (validSub(ip1) && validSub(ip2) && validSub(ip3) && validSub(ip4)){ string ip = ip1 + "." + ip2 + "." + ip3 + "." + ip4; result.push_back(ip); } } } } return result;}
思路3:优化的循环判断
vector<string> restoreIpAddresses(string s) { vector<string> res; if (s.empty() || s.size()<4 || s.size()>12) return res; vector<string> res; string tmp; for (int i = 1; i < 4; i++){ for (int j = 1; j < 4; j++){ for (int k = 1; k < 4; k++){ for (int l = 1; l < 4; l++){ if (i + j + k + l == s.size()){ int A = stoi(s.substr(0, i)); int B = stoi(s.substr(i, j)); int C = stoi(s.substr(i + j, k)); int D = stoi(s.substr(i + j + k, l)); if (A < 256 && B < 256 && C < 256 && D < 256) if ((tmp = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D)).size() == s.size() + 3) res.push_back(tmp); } } } } } return res;}
阅读全文
0 0
- 93.Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- 93. Restore IP Addresses
- PAT (Advanced Level) Practise 1083 List Grades (25)
- Masonry介绍与使用实践:快速上手Autolayout(纯代码IOSer)
- 如果再记不住该挨打了
- 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。
- RabbitMQ-安装
- 93. Restore IP Addresses
- Boosting和Bagging
- Quorum NWR
- 机器人技术(4)AtdRobot键盘控制底盘教程
- Ubuntu 开机出现 grub rescue> 终端模式修复方法
- 基层sql语句各部分执行顺序
- ForkJoinPool分支合并框架 核心思想->代码演示
- VS2013/SQL SERVER 产品密钥
- macos10.12.5+xcode+opencv3.2配置