[leetcode]Restore IP Addresses

来源:互联网 发布:设计主题软件 编辑:程序博客网 时间:2024/06/05 18:57

Restore IP Addresses

 

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)

解题思路:递归遍历

void push(string &str, int start, int n, string &retStr){    for(int i = 0; i < n; i++){        retStr.push_back(str[start + i]);    }}void pop(string &retStr, int n){    for(int i = 0; i < n; i++){        retStr.pop_back();    }}void innserRestoreIP(string str, int start, int dot, string rets, vector<string> & vs){int slen = str.size();int gap = slen - start;if(0 == dot){//如果剩下数字大于3或没有剩,或剩下2个以及以上第一个不能以0开头if(gap > 3 || 0 == gap || (gap > 1 && '0' == str[start])) return; string s(str, start, gap);if(atoi(s.c_str()) > 255) return; //剩下的数字大于255也不合法push(str, start, gap, rets);vs.push_back(rets);return;}if(start < slen){push(str, start, 1, rets);  //先取一个字符rets.push_back('.');innserRestoreIP(str, start + 1, dot - 1, rets, vs);pop(rets, 2);}if(str[start] != '0'){ //取两或三个字符但不能以0开头if(start + 1 < slen){push(str, start, 2, rets);rets.push_back('.');innserRestoreIP(str, start + 2, dot - 1, rets, vs);pop(rets, 3);}if(start + 2 < slen){string tmpStr(str, start, 3);if(atoi(tmpStr.c_str()) <= 255){push(str, start, 3, rets);rets.push_back('.');innserRestoreIP(str, start + 3, dot - 1, rets, vs);pop(rets, 4); }}    }}vector<string> restoreIpAddresses(string s) {vector<string> vs;string rets;innserRestoreIP(s, 0, 3, rets, vs);  //源始字符串,下标0,句点的个数return vs;}

0 0
原创粉丝点击