【算法/回溯算法/其它问题】题解+详细备注(共2题)
class Solution {
public:
vector<vector<int>> result;
vector<int> path;
void backtracking(vector<int> &nums,int startIndex){
if(path.size() > 1){
result.push_back(path);
}
unordered_set<int> unSet;
for(int i = startIndex;i<nums.size();++i){
if((!path.empty() && nums[i] < path.back())
|| unSet.find(nums[i]) != unSet.end()){
continue;
}
unSet.insert(nums[i]);
path.push_back(nums[i]);
backtracking(nums,i+1);
path.pop_back();
}
}
vector<vector<int>> findSubsequences(vector<int>& nums) {
backtracking(nums,0);
return result;
}
};
class Solution {
public:
unordered_map<string,map<string,int>> unMap;
bool backtracking(vector<string>& result,int ticketNum){
if(result.size() == ticketNum + 1){
return true;
}
for(auto &[key,value] : unMap[result[result.size()-1]]){
if(value > 0){
result.push_back(key);
value--;
if(backtracking(result,ticketNum)) return true;
value++;
result.pop_back();
}
}
return false;
}
vector<string> findItinerary(vector<vector<string>>& tickets) {
vector<string> result;
for(auto v : tickets){
unMap[v[0]][v[1]]++;
}
result.push_back("JFK");
backtracking(result,tickets.size());
return result;
}
};