LeetCode 93.复原IP地址
题目链接:
LeetCode 93.复原IP地址
代码:
class Solution {
public:
vector<string>result;
string path;
bool isValid(string s, int left,int right){
if(left>right) return false;
if(s[left]=='0'&& left!=right) return false;
int num = 0;
for(int i = left;i<=right;i++){
if(s[i]>'9'||s[i]<'0'){
return false;
}
num = num *10 + (s[i] - '0');
if(num>255){
return false;
}
}
return true;
}
void backtracking(string s, int startIndex, int pointNum){
if (pointNum == 3) { // 逗点数量为3时,分隔结束
// 判断第四段子字符串是否合法,如果合法就放进result中
if (isValid(s, startIndex, s.size() - 1)) {
result.push_back(s);
}
return;
}
for(int i= startIndex;i<s.size();i++){
if(isValid(s,startIndex,i)){
s.insert(s.begin()+i+1,'.');
pointNum+=1;
backtracking(s,i+2,pointNum);
pointNum-=1;
s.erase(s.begin()+i+1);
}
else break;
}
}
vector<string> restoreIpAddresses(string s) {
backtracking(s,0,0);
return result;
}
};
LeetCode 78.子集
题目链接:
LeetCode 78.子集
代码:
class Solution {
public:
vector<vector<int>>result;
vector<int>path;
void backtracking(vector<int>&nums,int startIndex){
if(startIndex>=nums.size()) return;
for(int i=startIndex;i<nums.size();i++){
path.push_back(nums[i]);
backtracking(nums,i+1);
result.push_back(path);
path.pop_back();
}
}
vector<vector<int>> subsets(vector<int>& nums) {
backtracking(nums,0);
result.push_back({});
return result;
}
};
LeetCode 90.子集2
题目链接:
LeetCode 90.子集2
代码:
class Solution {
public:
vector<vector<int>>result;
vector<int>path;
void backtracking(vector<int>& nums,int startIndex,vector<bool>used){
result.push_back(path);
if(startIndex>=nums.size()) return;
for(int i = startIndex;i<nums.size();i++){
if(i>0&&nums[i]==nums[i-1]&&used[i-1]==false){
continue;
}
else{
used[i] = true;
path.push_back(nums[i]);
backtracking(nums,i+1,used);
path.pop_back();
used[i]=false;
}
}
}
vector<vector<int>> subsetsWithDup(vector<int>& nums) {
sort(nums.begin(),nums.end());
vector<bool>used(nums.size(),false);
backtracking(nums,0,used);
return result;
}
};