验证IP地址
题目链接
class Solution {
public:
bool Ip4(string IP){
vector<string> ip;
split(IP, ip, '.');
if(ip.size()!=4) return false;
for(auto s: ip){
if(s.size()==0||s.size()>1&&s[0]=='0'||s.size()>3) return false;
for(auto c:s){
if(!isdigit(c)) return false;
}
int num = stoi(s);
if(num>255||num<0) return false;
}
return true;
}
bool Ip6(string IP){
vector<string> ip;
split(IP, ip, ':');
if(ip.size()!=8) return false;
for(auto s: ip){
if(s.size()==0||s.size()>4) return false;
for(auto c:s){
if(c<'0'||c>'9'&&c<'A'||c>'F'&&c<'a'||c>'f') return false;
}
}
return true;
}
void split(string IP, vector<string>& vip, char sign){
stringstream ss(IP);
string temp;
while(getline(ss, temp, sign)){
vip.push_back(temp);
}
if(IP.size()>0&&IP.back()==sign){
vip.push_back({});
}
}
string validIPAddress(string IP) {
if(Ip4(IP)) return "IPv4";
if(Ip6(IP)) return "IPv6";
return "Neither";
}
};
复原IP地址
题目链接
class Solution {
vector<string> res;
bool isValid(string& s, int start, int end){
if(start > end) return false;
if(s[start] == '0' && start != end) return false;
int num = 0;
for(int i = start; i <= end; i++){
if(s[i] < '0' || s[i] > '9') return false;
num = num * 10 + (s[i] - '0');
if(num > 255) return false;
}
return true;
}
void backtrace(string &s, int start, int pointnum){
if(pointnum == 3){
if(isValid(s, start, s.size() - 1)){
res.push_back(s);
}
return;
}
for(int i = start; i < s.size(); i++){
if(isValid(s, start, i)){
s.insert(s.begin() + i + 1, '.');
pointnum++;
backtrace(s, i + 2, pointnum);
pointnum--;
s.erase(s.begin() + i + 1);
}
else break;
}
}
public:
vector<string> restoreIpAddresses(string s) {
backtrace(s, 0, 0);
return res;
}
};
比较版本号
题目链接
class Solution {
public:
int compareVersion(string version1, string version2) {
int p = 0, q = 0;
int end = max(version1.size(), version2.size());
while(p < end || q < end){
int n1 = 0, n2 = 0;
while(p < version1.size() && version1[p] != '.'){
n1 = n1 * 10 + (version1[p++] - '0');
}
while(q < version2.size() && version2[q] != '.'){
n2 = n2 * 10 + (version2[q++] - '0');
}
if(n1 > n2) return 1;
else if(n1 < n2) return -1;
else{
p++;
q++;
}
}
return 0;
}
};