動機
要複習一下怎麼用C++
Problem
Given a string s
containing only digits, return all possible valid IP addresses that can be obtained from s
. You can return them in any order.
A valid IP address consists of exactly four integers, each integer is between 0
and 255
, separated by single dots and cannot have leading zeros. For example, "0.1.2.201" and "192.168.1.1" are valid IP addresses and "0.011.255.245", "192.168.1.312" and "192.168@1.1" are invalid IP addresses.
Example 1:
Input: s = "25525511135"Output: ["255.255.11.135","255.255.111.35"]
Example 2:
Input: s = "0000"Output: ["0.0.0.0"]
Example 3:
Input: s = "1111"Output: ["1.1.1.1"]
Example 4:
Input: s = "010010"Output: ["0.10.0.10","0.100.1.0"]
Example 5:
Input: s = "101023"Output: ["1.0.10.23","1.0.102.3","10.1.0.23","10.10.2.3","101.0.2.3"]
Constraints:
- t
0 <= s.length <= 3000
ts
consists of digits only.
Sol
題外話: 原來multiset就是sortedlist
class Solution {
public:
void bt(string&& s, int seg, string acc, vector<string>& ret) {
if (seg == 5) {
if (s.empty())
ret.push_back(acc.substr(0,acc.size()-1)); // remove dot
} else {
for (auto& len : {1, 2, 3}) {
if (s.size() >= len) {
string net = s.substr(0,len);
if (stoi(net) <= 255 && (net[0] != '0' || net == "0"))
bt(s.substr(len),seg+1,acc+net+".",ret);
}
}
}
}
vector<string> restoreIpAddresses(string s, int seg=1) {
vector<string> ret;
bt(move(s),1,"",ret);
return ret;
}
};