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 主站蜘蛛池模板: 仪征市| 共和县| 会理县| 白水县| 南投市| 杭州市| 丹阳市| 白城市| 泸溪县| 宜章县| 东乡族自治县| 莱芜市| 东宁县| 雅江县| 湘潭县| 收藏| 漠河县| 宁化县| 新营市| 托里县| 湖口县| 普定县| 武义县| 凌云县| 武鸣县| 刚察县| 菏泽市| 濮阳县| 镇远县| 集安市| 潜江市| 和田县| 郁南县| 三原县| 沙田区| 土默特左旗| 平江县| 清新县| 天柱县| 秦安县| 体育|