zoukankan      html  css  js  c++  java
  • leetcode 93 复原IP地址

    IP地址,分成四段,每段是0-255,按照每段的长度分别为1,2,3下一段长度分别1,2,3再下一段。。。。。。进行递归遍历,能满足条件的假如res中。比较难想到的就是假如有一段是三位的010是不符合要求的。这点一开始没想到,改成首尾不是0的才执行结果又漏掉了单个0的IP地址,比如0.0.0.0.。除了这两点之外剩下的代码还算好想。

    #include<bits/stdc++.h>
    using namespace std;
    class Solution {
    private:
        void getIP(string s,int x,int y,vector<string>&res,string &ans,int sum)//[x,x+y-1]前闭后闭从string s的第x位开始获取y位数字组成IP地址。
        {
            int n;
            n = s.size();
            int i;
            if (x + y -1> n - 1||sum>4)
                return;
            if ((4 - sum) * 3+ x + y-1 < n - 1)//如果剩下的几次都取3个数字都取不完所有元素,那么返回。
                return;
            if (y == 3)
            {
                if (100 * (s[x] - '0') + 10 * (s[x + 1] - '0') + (s[x + 2] - '0') > 255)
                    return;
            }
            if (s[x] - '0' == 0&&y!=1)
                return;
            for (i = x; i <= x + y-1; i++)
            {    
                ans.push_back(s[i]);
                if (i == x + y-1&&sum!=4)
                    ans.push_back('.');
            }
            if (x + y-1 == n - 1&&sum==4)//第三次取完了所有string s里面的元素,保存结果.
            {
                res.push_back(ans);
                for (i = 0; i < y; i++)//回溯
                {
                    ans.pop_back();
                }
                return;
            }
        //    if(y+2<=n-1)
            getIP(s,x+y , 1,res,ans,sum+1);
        //    if(y+3<=n-1)
            getIP(s, x+y , 2,res,ans,sum+1);
        //    if(y+4<=n-1)
            getIP(s, x+y, 3,res,ans,sum+1);
            ans.pop_back();
            for (i = 0; i < y; i++)
                ans.pop_back();
            return;
        }
    public:
        vector<string> restoreIpAddresses(string s) {
            int n = s.size();
            vector<string>res;
            string ans;
            ans.clear();
            getIP(s, 0, 1, res, ans, 1);
                ans.clear();
            getIP(s, 0, 2, res, ans, 1);
                ans.clear();
            getIP(s, 0, 3, res, ans, 1);
            return res;
        }
    };
  • 相关阅读:
    uva 10129
    年化利率
    house买房原理,2019,第一版
    car二手车购买原理
    car购车翻译篇
    car配置篇
    健身原理
    语法学习,从句
    语法学习,简单语句
    名词解释
  • 原文地址:https://www.cnblogs.com/legendcong/p/9439204.html
Copyright © 2011-2022 走看看