backtracking O(27) time 即O(34)
每一段都有3种可能,总共4段,遍历所有可能即为27种
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public: vector<string> restoreIpAddresses(string s) { dfs(s, "", 4); return res; }
void dfs(string_view s, string &&a, int dots) { if (dots == 0) { if (s.empty()) { a.pop_back(); res.push_back(a); } return; } string str; for (int i = 0; i < min((int)s.length(), 3); ++i) { str += s[i]; if (str.length() > 1 && str[0] == '0') break; if (stoi(str) > 255) break; dfs(s.substr(i + 1), a + str + '.', dots - 1); } }
vector<string> res; };
|