zoukankan      html  css  js  c++  java
  • [LintCode] Restore IP Address 复原IP地址

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

    Example

    Given "25525511135", return

    [
      "255.255.11.135",
      "255.255.111.35"
    ]
    

    Order does not matter.

    LeetCode上的原题,请参见我之前的博客Restore IP Addresses

    解法一:

    class Solution {
    public:
        /**
         * @param s the IP string
         * @return All possible valid IP addresses
         */
        vector<string> restoreIpAddresses(string& s) {
            vector<string> res;
            helper(s, 4, "", res);
            return res;
        }
        void helper(string s, int k, string out, vector<string>& res) {
            if (k == 0) {
                if (s.empty()) res.push_back(out);
                return;
            } 
            for (int i = 1; i < 4; ++i) {
                if (s.size() < i) break;
                int val = stoi(s.substr(0, i));
                if (val > 255 || i != to_string(val).size()) continue;
                helper(s.substr(i), k - 1, out + s.substr(0, i) + (k == 1 ? "" : "."), res);
            }
        }
    };

    解法二:

    class Solution {
    public:
        /**
         * @param s the IP string
         * @return All possible valid IP addresses
         */
        vector<string> restoreIpAddresses(string& s) {
            vector<string> res;
            for (int a = 1; a < 4; ++a)
            for (int b = 1; b < 4; ++b)
            for (int c = 1; c < 4; ++c) 
            for (int d = 1; d < 4; ++d)
                if (a + b + c + d == s.size()) {
                    int A = stoi(s.substr(0, a));
                    int B = stoi(s.substr(a, b));
                    int C = stoi(s.substr(a + b, c));
                    int D = stoi(s.substr(a + b + c, d));
                    if (A <= 255 && B <= 255 && C <= 255 && D <= 255) {
                        string t = to_string(A) + "." + to_string(B) + "." + to_string(C) + "." + to_string(D);
                        if (t.size() == s.size() + 3) res.push_back(t);
                    }
                }
            return res;
        }
    };
  • 相关阅读:
    Python编程四大神兽:迭代器、生成器、闭包和装饰器
    Linux基础
    3.8记录
    3.7记录
    3.6进度记录
    3.5进度
    3.4进度
    3.3进度
    3.2进度记录
    3.1记录
  • 原文地址:https://www.cnblogs.com/grandyang/p/5686738.html
Copyright © 2011-2022 走看看