1. 程式人生 > 其它 >LeetCode刷題知識點總結——回溯演算法

LeetCode刷題知識點總結——回溯演算法

回溯演算法

一、理論基礎

1.回溯演算法主要用於解決以下問題:組合、排列、切割、子集、排列、棋盤。

2.回溯演算法分析模板如下:

 void backtracking(引數) {
    if (終止條件) {
        存放結果;
        return;
    }
 
    for (選擇:本層集合中元素(樹中節點孩子的數量就是集合的大小)) {
        處理節點;
        backtracking(路徑,選擇列表); // 遞迴
        回溯,撤銷處理結果
    }
 }

3.組合問題

 class Solution {
 public:
     vector<vector<int>> result; // 存放符合條件結果的集合
     vector<int> path; // 用來存放符合條件結果
     void backtracking(int n, int k, int startIndex) {
         if (path.size() == k) {
             result.push_back(path);
             return;
        }
         for (int i = startIndex; i <= n; i++) {  
 //剪枝優化:在集合n中至多可開始的位置:n-(k-path.size())+1
             path.push_back(i); // 處理節點
             backtracking(n, k, i + 1); // 遞迴
             path.pop_back(); // 回溯,撤銷處理的節點
        }
    }
     vector<vector<int>> combine(int n, int k) {
         result.clear(); // 可以不寫
         path.clear();   // 可以不寫
         backtracking(n, k, 1);
         return result;
    }
 };

4.組合總和問題

 class Solution {
 public:
     vector<vector<int>> result; // 存放符合條件結果的集合
     vector<int> path; // 用來存放符合條件結果
     void backtracking(vector<int>& num, int target,int sums,int startIndex) {
         if(sums>target) return;
         if (sums==target) {
             result.push_back(path);
             return;
        }
         for (int i = startIndex; i < num.size(); i++) {  
 //剪枝優化:在集合n中至多可開始的位置:n-(k-path.size())+1(如果規定了組合個數,且是遞增陣列)
             path.push_back(num[i]); // 處理節點
             sums +=num[i];
             backtracking(num, target, sums,i ); // 遞迴
             sums-=num[i];
             path.pop_back(); // 回溯,撤銷處理的節點
        }
    }
     vector<vector<int>> combine(vector<int>& num, int target) {
         result.clear(); // 可以不寫
         path.clear();   // 可以不寫
         backtracking(num, target,0,1);
         return result;
    }
 };

 

 

TRANSLATE with x English
Arabic Hebrew Polish
Bulgarian Hindi Portuguese
Catalan Hmong Daw Romanian
Chinese Simplified Hungarian Russian
Chinese Traditional Indonesian Slovak
Czech Italian Slovenian
Danish Japanese Spanish
Dutch Klingon Swedish
English Korean Thai
Estonian
Latvian Turkish
Finnish Lithuanian Ukrainian
French Malay Urdu
German Maltese Vietnamese
Greek Norwegian Welsh
Haitian Creole Persian  
  TRANSLATE with COPY THE URL BELOW Back EMBED THE SNIPPET BELOW IN YOUR SITE Enable collaborative features and customize widget: Bing Webmaster Portal Back     此頁面的語言為中文(簡體)   翻譯為        
  • 中文(簡體)
  • 中文(繁體)
  • 丹麥語
  • 烏克蘭語
  • 烏爾都語
  • 亞美尼亞語
  • 俄語
  • 保加利亞語
  • 克羅埃西亞語
  • 冰島語
  • 加泰羅尼亞語
  • 匈牙利語
  • 卡納達語
  • 印地語
  • 印尼語
  • 古吉拉特語
  • 哈薩克語
  • 土耳其語
  • 威爾士語
  • 孟加拉語
  • 尼泊爾語
  • 布林語(南非荷蘭語)
  • 希伯來語
  • 希臘語
  • 庫爾德語
  • 德語
  • 義大利語
  • 拉脫維亞語
  • 挪威語
  • 捷克語
  • 斯洛伐克語
  • 斯洛維尼亞語
  • 旁遮普語
  • 日語
  • 普什圖語
  • 毛利語
  • 法語
  • 波蘭語
  • 波斯語
  • 泰盧固語
  • 泰米爾語
  • 泰語
  • 海地克里奧爾語
  • 愛沙尼亞語
  • 瑞典語
  • 立陶宛語
  • 緬甸語
  • 羅馬尼亞語
  • 寮國語
  • 芬蘭語
  • 英語
  • 荷蘭語
  • 薩摩亞語
  • 葡萄牙語
  • 西班牙語
  • 越南語
  • 亞塞拜然語
  • 阿姆哈拉語
  • 阿爾巴尼亞語
  • 阿拉伯語
  • 韓語
  • 馬爾加什語
  • 馬拉地語
  • 馬拉雅拉姆語
  • 馬來語
  • 馬耳他語
  • 高棉語