93.复原IP地址
class Solution {
public:
vector<string> result;
bool isIP(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 backtracking(int index, int pointnum, string s){
if(pointnum == 3){
if(isIP(s, index, s.size()-1)){
result.push_back(s);
}
return;
}
for(int i=index; i<s.size(); i++){
if(isIP(s, index, i)){
s.insert(s.begin()+i+1, '.');
pointnum++;
backtracking(i+2,pointnum,s);
pointnum--;
s.erase(s.begin()+i+1);
}else{
break;
}
}
}
vector<string> restoreIpAddresses(string s) {
if(s.size()<4 || s.size()>12){
return result;
}
backtracking(0, 0, s);
return result;
}
};
参考文章:代码随想录-93.复原IP地址
78.子集
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(vector<int>& nums, int index){
result.push_back(temp);
if(index >= nums.size()){
return;
}
for(int i=index; i<nums.size(); i++){
temp.push_back(nums[i]);
backtracking(nums, i+1);
temp.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums, 0);
return result;
}
};
参考文章:代码随想录-78.子集
90.子集II
class Solution {
public:
vector<vector<int>> result;
vector<int> temp;
void backtracking(vector<int>& nums, int index){
result.push_back(temp);
if(index >= nums.size()){
return;
}
for(int i=index; i<nums.size(); i++){
if(i!=index && nums[i] == nums[i-1]){
continue;
}
temp.push_back(nums[i]);
backtracking(nums, i+1);
temp.pop_back();
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(), nums.end());
backtracking(nums, 0);
return result;
}
};
参考文章:代码随想录-90.子集II