93. Restore IP Addresses
Posted xxinn
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了93. Restore IP Addresses相关的知识,希望对你有一定的参考价值。
【题目】
Given a string containing only digits, restore it by returning all possible valid IP address combinations.
Example:
Input: "25525511135"
Output: ["255.255.11.135", "255.255.111.35"]
【题意】
给出一个string,返回符合要求的IP地址的集合。
IP地址的每一个段范围是0-255,一共有四段,除值为0外,不能以0开头。
【解答】
使用递归,按照要求生成符合条件的段的集合。
BFS和DFS每一个node只有一遍,所以时间复杂度是O(n)。带了其他算法的可能是O(nloge)。
这题感觉是O(n * n)。
class Solution { public: vector<string> restoreIpAddresses(string s) { return getStrs(3, s); } vector<string> getStrs(int n, string s){ int len = s.length(); vector<string> res; if(n > len - 1 ) return res; if(n == 0){ int value = 0; for(int i=0; i<len; i++){ value = value * 10 + s[i] - ‘0‘; } if(s[0] == ‘0‘ && len == 1){ res.push_back(s); } if(s[0]!=‘0‘ && value >=0 && value<=255){ res.push_back(s); } return res; } string str = ""; int value = 0; for(int i=0; i<len && i<3; i++){ str += s[i]; value = 10 * value + (s[i] - ‘0‘); if(value >= 0 && value <= 255){ string temp = str + "."; string nextStr = ""; for(int j=i+1; j<len; j++) nextStr += s[j]; vector<string> nextStrs = getStrs(n-1, nextStr); for(int j=0; j<nextStrs.size(); j++){ temp += nextStrs[j]; res.push_back(temp); temp = str + "."; } } if(i==0 && s[i] == ‘0‘) break; } return res; } };
以上是关于93. Restore IP Addresses的主要内容,如果未能解决你的问题,请参考以下文章