代码随想录算法训练营第三十天 | 332. 重新安排行程、51. N 皇后、37. 解数独

58 阅读1分钟

代码随想录算法训练营第三十天 | 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