博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
leetcode Restore IP Addresses
阅读量:7091 次
发布时间:2019-06-28

本文共 1751 字,大约阅读时间需要 5 分钟。

hot3.png

将一个数字串转化成合法IP,  DFS,注意一些细节

class Solution {public:    vector
 restoreIpAddresses(string s) {     vector
 ans;        dfs(ans, s, "", 0, 0);        return ans;    }    void dfs(vector
 &ans, string s, string str, int pos, int dep) {        if (dep >= 4) {            if (dep == 4 && pos == s.length()) ans.push_back(str);        } else {            for (int i = pos; i < s.length(); i++) {                string sub = s.substr(pos, i-pos+1);                if (sub.length() <= 3 && stoi(sub) >= 0 && stoi(sub) <= 255 &&                    to_string(stoi(sub)) == sub) {                    string common = (dep == 3 ? "": ".");                    dfs(ans, s, str+sub+common, i+1, dep+1);                }            }        }    }        /**     * vector
 ans; //return all ips     * string s;    // input string     * string ip;   // 暂时存储     * string pos;  // 但前起始坐标     * string step; // ip地址中第几位数(4部分)     * 在一段 字符串 或 数组 上分段提取,使用 dfs, dfs 可以加入 剪枝     * 在这段数据上 搜索最小值,可以改成bfs     */    void dfs2(vector
 &ans, string s, string ip, int pos, int step)    {     if(pos == s.length() && step == 4){     //删除最后的点     ans.push_back(ip.substr(0,ip.size()-1));     return;     }     if(step > 4) return; //剪枝     //  if(s.szie() - i > (4-step) * 3) return; //更快          for(int i=pos+1; i<=s.size(); i++)     {     string tmp = s.substr(pos, i-pos);     int val = stoi(tmp);     //ip地址0-255之间, 并且 前面不能出现0(022);     // stoi(string) , to_string(int), char* = c_str(string)      if(tmp.length() <=3 && val >=0 && val <= 255 && to_string(val) == tmp){     dfs2(ans, s, ip+tmp+".",i,step+1);     }     }    }};

转载于:https://my.oschina.net/badboy2/blog/503634

你可能感兴趣的文章
CSS学习笔记——最基础的定义与使用
查看>>
形象的网络状况工具
查看>>
linux下mysql的root密码忘记解决方法
查看>>
Test
查看>>
Nginx配置文件nginx.conf中文详解(总结)
查看>>
范围分为
查看>>
一致性Hash算法(Consistent Hash)
查看>>
update the drawPictures
查看>>
Java中throw和throws的区别
查看>>
线程池
查看>>
人生路上的得与失,我要重新起航
查看>>
利用移动硬盘安装windows7系统
查看>>
Windows mobile UI
查看>>
Android 自动更新APP时确定安装后没有显示安装完成页面
查看>>
APUE第八章学习札记之进程用户ID与文件用户权限相关知识总结
查看>>
c++中::的用法和命名空间
查看>>
My First Angular 2 App
查看>>
使用Percona XtraBackup备份 MySQL InnoDB 数据库
查看>>
微信开发实践(一):使用JS-SDK实现自定义分享 Ⅰ
查看>>
『毒舌吐槽社区』-很多敏感内容,你懂的!
查看>>