代码随想录算法训练营第三十天 | 332. 重新安排行程、51. N 皇后、37. 解数独
332. 重新安排行程
题目链接:332. 重新安排行程
- 难在想数据结构
-
class Solution { private: unordered_map<string, map<string, int>> targets; bool backTrack(int ticketNum, vector<string>& result) { if(result.size() == ticketNum + 1) { return true; } for(auto& target: targets[result.back()]) { // for (pair<const string, int>& target : targets[result[result.size() - 1]]) { if(target.second > 0) { result.push_back(target.first); target.second--; if(backTrack(ticketNum, result)) return true; result.pop_back(); target.second++; } } return false; } public: vector<string> findItinerary(vector<vector<string>>& tickets) { vector<string> result; for (const vector<string>& vec: tickets) { targets[vec[0]][vec[1]]++; } result.push_back("JFK"); backTrack(tickets.size(), result); return result; } };
51. N 皇后
题目链接:51. N 皇后
- 主要是回溯和剪枝
37. 解数独
题目链接:37. 解数独
- 没法用N皇后的解法解出,因为比N皇后多一个维度
- return false 和return true