来个小结
子集問題分析:
時間復雜度:O(n * 2n),因為每一個元素的狀態無外乎取與不取,所以時間復雜度為O(2n),構造每一組子集都需要填進數組,又需要O(n),最終時間復雜度:O(n * 2^n)
空間復雜度:O(n),遞歸深度為n,所以系統棧所用空間為O(n),每一層遞歸所用的空間都是常數級別,注意代碼里的result和path都是全局變量,就算是放在參數里,傳的也是引用,并不會新申請內存空間,最終空間復雜度為O(n)
排列問題分析:
時間復雜度:O(n!),這個可以從排列的樹形圖中很明顯發現,每一層節點為n,第二層每一個分支都延伸了n-1個分支,再往下又是n-2個分支,所以一直到葉子節點一共就是 n * n-1 * n-2 * … 1 = n!。
空間復雜度:O(n),和子集問題同理。
組合問題分析:
時間復雜度:O(n * 2^n),組合問題其實就是一種子集的問題,所以組合問題最壞的情況,也不會超過子集問題的時間復雜度。
空間復雜度:O(n),和子集問題同理
總結