zoukankan      html  css  js  c++  java
  • 37复原IP地址(93)

    作者: Turbo时间限制: 1S章节: 递归

    晚于: 2020-07-29 12:00:00后提交分数乘系数50%

    截止日期: 2020-08-05 12:00:00

    问题描述 :

    给定一个只包含数字的字符串,复原它(在中间插入点号)并返回所有可能的 IP 地址格式,输出可能的格式的数量。

    有效的 IP 地址正好由四个整数(每个整数位于 0 到 255 之间)组成,整数之间用 '.' 分隔。

    示例:

    输入: "25525511135"

    输出: 2

    说明:因为可能的IP地址包括:["255.255.11.135", "255.255.111.35"]

    输入说明 :

    输入一个只包含数字的字符串

    输出说明 :

    输出一个整数

    输入范例 :

    输出范例 :

    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>
    using namespace std;
    
    class Solution 
    {
    public:
        vector<string> restoreIpAddresses(string s) 
        {
            vector<string> res;
            if(s.size()<4)
                return res;
            vector<string> path;//存放每一个合法的序列 
            dfs(s,0,path,res);
            return res;
        }
    private:
        void dfs(const string &s,int pos,vector<string> &path,vector<string> &res)
        {
            int max=(4-path.size())*3;//剩余位的最大长度 ,最大12 
            if(s.size()-pos>max)//若剩余位数大于最大剩余位数长度,可提前终止
                return ;
            if(path.size()==4&&pos==s.size())//path里面有四个,pos长度刚好到字符串末尾 
            {
                string str=path[0]+"."+path[1]+"."+path[2]+"."+path[3];//拼接成合法序列 
                res.push_back(str);
                return ;
            }
            for(int i=pos;i<s.size()&&i<=pos+2;i++)//从当前位置开始,长度小于总的并且最多3位 
            {
                string temp=s.substr(pos,i-pos+1);
                if(valid(temp))//先判断字符是否有效 
                {
                    path.push_back(temp);
                    dfs(s,i+1,path,res);
                    path.pop_back();
                }
            }
        }
        
        bool valid(string &temp)
        {
            int m=stoi(temp);//字符串转为数字 
            if(m>255)
                return false;
            if(temp[0]=='0'&&temp.size()>=2)//以0开头但是字符数大于2是不合法序列 
                return false;
            return true;
        }
    };
    
    int main()
    {
        string s;
        cin>>s;
        vector<string> res=Solution().restoreIpAddresses(s);
        cout<<res.size();
    }

     

  • 相关阅读:
    Integer.highestOneBit(int i)方法的作用与底层实现
    一文搞明白位运算、补码、反码、原码
    Zookeeper如何解决脑裂问题
    Zookeeper请求处理原理分析
    Linux 设备驱动之 UIO 机制
    virtio guest side implementation: PCI, virtio device, virtio net and virtqueue
    DPDK之(八)——vhost库
    Red Hat OpenStack 10的新特性
    探秘DPDK Virtio的不同路径
    2017版:KVM 性能优化之内存优化
  • 原文地址:https://www.cnblogs.com/zmmm/p/13625463.html
Copyright © 2011-2022 走看看