ans;vectorchoice;voidfu">

一区二区三区电影_国产伦精品一区二区三区视频免费_亚洲欧美国产精品va在线观看_国产精品一二三四

聯系我們 - 廣告服務 - 聯系電話:
您的當前位置: > 關注 > > 正文

每日訊息!n=4,k=2classSolution 如何遍歷解空間樹?

來源:CSDN 時間:2023-03-23 15:49:22


(資料圖片)

n=4, k=2

class Solution {public:    vectorans;    vectorchoice;        void func(int startIndex, int n, int k){if(choice.size() == k){ans.push_back(choice);            return;        }        for(int i = startIndex; i < n; i++){choice.push_back(i + 1);            func(i + 1, n, k);            choice.pop_back();        }    }    vectorcombine(int n, int k) {func(0, n, k);        return ans;    }};

優化

如果按照我們上面代碼的思路,整個解空間樹都會被遍歷到,而實際上,這些紅叉的路徑是不需要遍歷的,因為他們遍歷下去根本就不會到達第3層,即無法挑選出3個元素

如果我們此時沒有選擇元素,choice.size()=0,i=0,按照圖中解空間樹,我們不能從下標為3的元素4開始遍歷

如果我們此時選擇下標為0的元素1,choice.size()=1,進入下一層i=1,按照圖中解空間樹,我們不能從下標為4的元素5開始遍歷

如果我們此時選擇下標為1的元素2,choice.size()=1,進入下一層i=1,按照圖中解空間樹,我們不能從下標為4的元素5開始遍歷

choice.size()表示已經選擇的元素數量,n表示元素的總數量,k表示需要選擇的元素數量,i表示當前下標(已經進入了下一層,i+1了)。我們需要剩下能選擇的元素數量(n-i)能夠供應還需要的元素數量(k-choice.size())。所以我們有:

k ? c h o i c e . s i z e ( ) < = n ? i k-choice.size()<=n-i k?choice.size()<=n?i,即 i < = n ? ( k ? c h o i c e . s i z e ( ) ) i<=n-(k-choice.size()) i<=n?(k?choice.size())

class Solution {public:    vectorans;    vectorchoice;        void func(int startIndex, int n, int k){if(choice.size() == k){ans.push_back(choice);            return;        }        for(int i = startIndex; i <= n-(k-choice.size()); i++){choice.push_back(i + 1);            func(i + 1, n, k);            choice.pop_back();        }    }    vectorcombine(int n, int k) {func(0, n, k);        raeturn ans;    }};

責任編輯:

標簽:

相關推薦:

精彩放送:

新聞聚焦
Top 主站蜘蛛池模板: 商河县| 渭南市| 故城县| 攀枝花市| 开阳县| 扬州市| 康马县| 新疆| 东兰县| 安图县| 盘锦市| 太湖县| 乡城县| 托里县| 微山县| 唐河县| 六安市| 罗江县| 翁源县| 泗洪县| 海城市| 延津县| 赞皇县| 施甸县| 通江县| 涿州市| 开原市| 盐源县| 溧水县| 新巴尔虎右旗| 西乌珠穆沁旗| 深泽县| 聂荣县| 纳雍县| 宁都县| 错那县| 天台县| 保康县| 广安市| 盐池县| 措美县|