[leetcode]93. Restore IP Addresses

来源:互联网 发布:手机数据连接不能上网 编辑:程序博客网 时间:2024/04/29 15:18

题目地址

https://leetcode.com/problems/restore-ip-addresses/

题目大意

给一串全是数字的字符串,在其中添加三个.使其成为合法的点分十进制IP地址,返回所有的可能。

解题思路

将字符串分成两个部分,前半部分为0-255之间的数字。后半部分递归处理,直到将字符串分成4个部分,然后判断是否为合法的IP地址。
这其中要注意,多个00的情况和以0开头的字符串的情况。

代码

class Solution {public:    vector<string> restoreIpAddresses(string s) {        vector<string> result;        small(s, "", 1, result);        return result;    }    void small(const string & remain, const string & prefix, int part, vector<string> & result) {        if (remain.size() == 0) {            return;        }        if (part == 4) {            if (remain.size() > 3) {                return;            }            if (!is_valid(remain)) {                return;            }             result.push_back(prefix + remain);            return;        }        for (int i = 1; i <= 3 && i < remain.size(); ++i) {            string prefix_tmp = remain.substr(0, i);            if (!is_valid(prefix_tmp)) {                break;            }            prefix_tmp = prefix + prefix_tmp + ".";            string remain_tmp = remain.substr(i);            small(remain_tmp, prefix_tmp, part + 1, result);        }        return;    }    bool is_valid(const string & s) {        int tmp = stoi(s);        if (tmp < 0 || tmp > 255) {            return false;        }        if (tmp != 0 && s[0] == '0') {            return false;        }         if (tmp == 0 && s.size() != 1) {            return false;        }        return true;     }};
0 0