LC77 Combinations
生活随笔
收集整理的這篇文章主要介紹了
LC77 Combinations
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
可以用類似于DFS的方法去做。這道題目是LC78 Subsets的子問題。
對于LC78,另一個巧妙的做法是:我們可以先用一個整形數組(長度和nums相等),數組元素一開始都是1。把整個數組看成一個二進制數,然后模擬二進制減法,將這個數組一步一步減1減到0。每減一次1,對照這個二進制數組和nums數組,如果某個位置上二進制數組元素為1,則將nums數組相應位置上的數輸出。這樣就能輸出所有的子集。
這里附上LC77的代碼。
1 class Solution { 2 private: 3 vector<vector<int> > ret; 4 vector<int> a; 5 public: 6 void solve(int dep, int maxDep, int n, int start) 7 { 8 if (dep == maxDep) 9 { 10 ret.push_back(a); 11 return; 12 } 13 int last=n+1-(maxDep-dep); 14 for(int i = start; i <= last ; i++) 15 { 16 a[dep] = i; 17 solve(dep + 1, maxDep, n, i + 1); 18 } 19 } 20 21 vector<vector<int> > combine(int n, int k) { 22 a.resize(k); 23 ret.clear(); 24 solve(0, k, n, 1); 25 return ret; 26 } 27 }; View Code?
轉載于:https://www.cnblogs.com/vaecn/p/5349981.html
總結
以上是生活随笔為你收集整理的LC77 Combinations的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 面向对象封装
- 下一篇: jQuery Ajax全解析