[LeetCode]93.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)

思路

基本思路就是取出一个合法的数字,作为IP地址的一项,然后递归处理剩下的项。可以想象出一颗树,每个结点有三个可能的分支(因为范围是0-255,所以可以由一位两位或者三位组成),每个数都必须小于等于255。并且这里树的层数不会超过四层,因为IP地址由四段组成,到了之后我们就没必要再递归下去,可以结束了。

代码

/*---------------------------------------
*   日期:2015-05-15
*   作者:SJF0115
*   题目: 93.Restore IP Addresses
*   网址:https://leetcode.com/problems/restore-ip-addresses/
*   结果:AC
*   来源:LeetCode
*   博客:
-----------------------------------------*/
#include <iostream>
#include <vector>
using namespace std;

class Solution {
public:
    vector<string> restoreIpAddresses(string s) {
        vector<string> result;
        int size = s.size();
        if(size == 0){
            return result;
        }//if
        string ip;
        helper(s,1,0,ip,result);
        return result;
    }
private:
    int to_int(string str){
        int size = str.size();
        if(size == 0){
            return 0;
        }//if
        int result = 0;
        for(int i = 0;i < size;++i){
            result = result * 10 + str[i] - '0';
        }//for
        return result;
    }
    void helper(string &str,int step,int index,string ip,vector<string> &result){
        // 终止条件
        int size = str.size();
        if(step == 5){
            if(index == size){
                result.push_back(ip);
            }//if
            return;
        }//if
        string part;
        for(int i = 1;i <= 3;++i){
            // 不能以0开始(单个0可以)
            if(i != 1 && str[index] == '0'){
                break;
            }//if
            if(index+i <= size){
                part = str.substr(index,i);
                if(to_int(part) <= 255){
                    string tmp = ip;
                    if(step != 1){
                        tmp += ".";
                    }//if
                    tmp += part;
                    helper(str,step+1,index+i,tmp,result);
                }//if
            }//if
        }//for
    }
};

int main(){
    Solution s;
    //string str("25525511135");
    string str("010010");
    vector<string> vec = s.restoreIpAddresses(str);
    for(int i = 0;i < vec.size();++i){
        cout<<vec[i]<<endl;
    }//for
    return 0;
}

运行时间

时间: 2025-01-01 00:45:13

[LeetCode]93.Restore IP Addresses的相关文章

Restore IP Addresses:LeetCode

原题链接: http://oj.leetcode.com/problems/restore-ip-addresses/ 这道题的解法非常接近于NP问题,也是采用递归的解法.基本思路就是取出一个合法的数字,作为IP地址的一项,然后递归处理剩下的项.可以想象出一颗树,每个结点有三个可能的分支(因为范围是0-255,所以可以由一位两位或者三位组成).并且这里树的层数不会超过四层,因为IP地址由四段组成,到了之后我们就没必要再递归下去,可以结束了.这里除了上述的结束条件外,另一个就是字符串读完了.可以看

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) C++实现代码: #includ

leetcode难度及面试频率

转载自:LeetCode Question Difficulty Distribution               1 Two Sum 2 5 array sort         set Two Pointers 2 Add Two Numbers 3 4 linked list Two Pointers           Math 3 Longest Substring Without Repeating Characters 3 2 string Two Pointers      

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

【RAC】如何修改 private ip

版本: Clusterware :11.2.0.2 database    :11.2.0.1 #修改前 10.250.7.115          rac1-priv 10.250.7.119          rac2-priv #修改后 10.10.10.101          rac1-priv 10.10.10.102          rac2-priv 因为在11.2版本的Grid Infrastructure中,CRS 服务依赖于存储在OCR中的私有网卡配置信息.下面是存储在O

LoadRunner 技巧之 IP欺骗 (推荐)

IP欺骗也是也loadrunner自带的一个非常有用的功能. 需要使用ip欺骗的原因: 1.当某个IP的访问过于频繁,或者访问量过大是,服务器会拒绝访问请求,这时候通过IP欺骗可以增加访问频率和访问量,以达到压力测试的效果. 2.某些服务器配置了负载均衡,使用同一个IP不能测出系统的实际性能.LR中的IP欺骗通过调用不同的IP,可很大程度上的模拟实际使用中多IP访问和并测试服务器均衡处理的能力. 3.有一些网站会限制同一个用户同一个IP 的登陆.为了更加真实的模拟实际情况,LoadRunner允

iptables v1.4.11发布 IP信息包过滤系统

iptables 是与最新的 2.4.x 版本 Linux 内核集成的 IP 信息包过滤系统.如果 Linux 系统连接到因特网或 LAN.服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置. netfilter/iptables IP 信息包过滤系统是一种功能强大的工具,可用于添加.编辑和除去规则,这些规则是在做信息包过滤决定时,防火墙所遵循和组成的规则.这些规则存储在专用的信息包过滤表中,而这些表集成在 Linux 内核

Oracle 11g RAC环境下Private IP修改方法及异常处理

Oracle 11g RAC环境下Private IP修改方法及异常处理 Oracle 11g RAC环境下Private IP修改方法及异常处理 一. 修改方法 1. 确认所有节点CRS服务以启动 # olsnodes -s -n –i host1 1 host1-vip Active host2 2 host2-vip Active 2. 修改Private IP配置信息 如果之前只有一个私有网卡,则直接删除时会报错,如:PRIF-31: Failed to delete the speci