Restore IP Addresses

来源:互联网 发布:毒狗药三步倒淘宝 编辑:程序博客网 时间:2024/04/29 17:02

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)

思路:DFS思路, IP address的特点是一定是四段,每段数字的大小介于0-255之间(除第一段不能为0外)。题中有两个限制,一个是通过count来控制剩余的位数;另一个是start开始判断是否每个段数的大小<256。

class Solution {public:    vector<string> restoreIpAddresses(string s) {        vector<string> result;        if (s.size() < 4 || s.size() > 12) {            return result;        }                restoreUtil(s, result, "", 0, 0);        return result;    }        void restoreUtil(string s, vector<string> &result, string temp, int start, int count) {                if (count == 4 && start == s.size()) {            temp.pop_back();            result.push_back(temp);            return;        }                //通过剩余的位数来判断是否合法        int remains = s.size() - start;          if (remains < 4 - count || remains > (4 - count) * 3) {              return;          }                  int address = 0;        for (int i = 0; i < 3 && i + start < s.size(); i++) {            address = address * 10 + s[start+i] - '0';            if (address < 256) {                restoreUtil(s, result, temp + s.substr(start, i + 1) + '.', start + i + 1, count + 1);            }                        if (address == 0) {                break;            }        }    }};


0 0
原创粉丝点击