93.复原IP地址
自己做了个90%内容,仔细分析跟标答差在哪里
class Solution {
public:
vector<string> result;
string path;
int secCount = 0;
bool if_IP(const string& s) {
if (s[0] == '0' && s.size()>1) return false;
if (stoll(s)>255) return false;
return true;
}
void backtracking(const string& s, string& path, int index) {
if (secCount == 4 ) {
result.push_back(path);
return;
}
for (int i = index; secCount<=4 && i < s.size(); ++i) {
string sub;
if(secCount<3) sub = s.substr(index, i-index+1);
else sub = s.substr(index, s.size()-1);
if (if_IP(sub)) {
if (secCount == 0) {
path+=sub;
++secCount;
} else {
path = path +"."+sub;
++secCount;
}
} else continue;
backtracking(s,path,i+1);
if(secCount == 1) {
path.erase(path.length()-sub.length());
}
else path.erase(path.length() - sub.length() -1);
--secCount;
}
}
vector<string> restoreIpAddresses(string s) {
result.clear();
path.clear();
backtracking(s,path,0);
result.erase(unique(result.begin(),result.end()),result.end());
return result;
}
};
78.子集
- 进入递归就收集元素,不在需要逻辑判断
- 终止条件其实也可不写
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex) {
result.push_back(path);
if (startIndex>= nums.size()) return ;
for (int i = startIndex; i < nums.size(); ++i) {
path.push_back(nums[i]);
backtracking(nums,i+1);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};
90.子集II
- 78加去重
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int>& nums, int startIndex) {
result.push_back(path);
if (startIndex>= nums.size()) return ;
for (int i = startIndex; i < nums.size(); ++i) {
path.push_back(nums[i]);
backtracking(nums,i+1);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};