LeetCode93—Restore IP Addresses

类似路径搜索问题,IP地址每一小段的范围是0~255,对于输入的字串来说,考虑长度分别为1,2,3这三种情况。

原题

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)

分析

想象一个树。一共四层,每一层代表ip地址的小段,每一层必须满足条件”0~255”(1位数到3位数),且不能出现”01” “024”这种首字母为0的情况。
递归搜索结果,返回的条件:
1. 收集满4段,并且每段有效
2. 输入串s的字符全部用完
对于第2个条件,我之前的想法是,当收集满4段之后,把这4段长度加起来与s.size()比较,后来网上看到一种更好的方法:让s.size()index(递归变量)比较,这样效率更高,不用每次循环计算长度,均在代码中注释。

代码

class Solution {
private:bool valid(string s){if (s.size() == 2){if (s[0] == '0')//"01"情况排除return false;}if (s.size() == 3){if (s[0] == '0' || atoi(s.c_str()) > 255)//除了"001"还要排除大于255return false;}return true;}void help(string s, int len, vector<string>& tmpRes, vector<string>&result, int index){if (tmpRes.size() == 4){//当满足条件时,s里面的字符肯定用完,i==s.size()-1,则index==i+1==s.size()if (index == s.size()){string ip;for (int i = 0; i < tmpRes.size(); i++){ip += (tmpRes[i] + '.');}ip.pop_back();result.push_back(ip);}return;//下述方法每次都计算ip的长度,效率较低/*string ip;for (int i = 0; i < tmpRes.size(); i++){ip += (tmpRes[i] + '.');}ip.pop_back();if (ip.size() == len + 3){result.push_back(ip);}elsereturn;*/}string str;for (int i = index; (i < len) && (str.size()<3); i++){str.push_back(s[i]);if (valid(str)){tmpRes.push_back(str);help(s, len, tmpRes, result, i + 1);tmpRes.pop_back();}}}
public:vector<string> restoreIpAddresses(string s) {vector<string>result;vector<string>tmpRes;help(s, s.size(), tmpRes, result, 0);return result;}
};

LeetCode93—Restore IP Addresses相关推荐

  1. [LeetCode]93.Restore IP Addresses

    题目 Given a string containing only digits, restore it by returning all possible valid IP address comb ...

  2. 【DFS + backtrack】LeetCode 93. Restore IP Addresses

    LeetCode 93. Restore IP Addresses Solution1:我的答案 怎么就这么慢... class Solution { public:vector<string& ...

  3. [Swift]LeetCode93. 复原IP地址 | Restore IP Addresses

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  4. [LeetCode] Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  5. [LeetCode] Restore IP Addresses 复原IP地址

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  6. Restore IP Addresses leetcode java

    题目: Given a string containing only digits, restore it by returning all possible valid IP address com ...

  7. 93. Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  8. LeetCode:Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  9. LeetCode 93. Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

  10. 【leetcode刷题笔记】Restore IP Addresses

    Given a string containing only digits, restore it by returning all possible valid IP address combina ...

最新文章

  1. MXNET gluon自定义损失函数
  2. PHPExcel报错:谷歌浏览器显示网页可能暂时无法连接,或者它已永久性地移动到了新网址的原因?
  3. LintCode-A + B 问题
  4. 使用jupyter notebook打开.ipynb文件
  5. 7月SCI/SSCI期刊变动,警惕这5本被剔除
  6. 电磁流量计的工作原理
  7. 进销存mysql数据库_进销存管理系统数据库设计
  8. 10大漏洞评估和渗透测试工具
  9. 一个屌丝程序猿的人生(三十二)
  10. javascript基础常识问答(五)
  11. 生成带微信头像的用户二维码
  12. Fiddler - The system proxy was changed. Click to reenable capturing.
  13. 云原生、工业互联网之浅见
  14. 微信小程序:点击图片进行预览
  15. 幻灯片自动播放的实现
  16. iPhone越狱后导致无法快充的问题,iPhone X无法18瓦快充
  17. vue鼠标悬停出现悬浮框(简易版实现)
  18. go程序设计语言第四章-组合类型
  19. 苹果手机php怎么更新,Apple Watch固件系统怎么更新升级?
  20. Jiss Wang:Whitecoin白币新生态体系中的落地应用

热门文章

  1. python正则表达式实战中的总结
  2. eclipse:Project is already imported into workspace
  3. 选择FPGA,认识“她”。
  4. java抽象类重载_012 JAVA 抽象类、接口、String类的基础了解
  5. 从删库到跑路再到权限管理
  6. 调试基础知识0(串口调试助手对比 丁丁 大傻 友善)
  7. 树莓派GPIO远程控制继电器
  8. mysql 内连接、左连接会出现笛卡尔积?
  9. 产品原型设计规范——Axure
  10. 旋度的散度恒为0公式推导