leetcode 77 組合 回溯加剪枝

2021-10-10 21:30:00 字數 744 閱讀 7872

給定兩個整數 n 和 k,返回 1 … n 中所有可能的 k 個數的組合。

示例:輸入: n = 4, k = 2

輸出:[

[2,4],

[3,4],

[2,3],

[1,2],

[1,3],

[1,4],

]分析:此題為較簡單,使用回溯加剪枝即可解決。

首先我們分析遞迴函式的引數,需要乙個pos來表示當前選取了多少個數,同時還需要乙個引數curr來表示當前是對1…n中的哪個數進行操作,對於每個curr都可以有選和不選兩種選擇,分別遞迴下去即可。

需要注意的是,這裡有個剪枝小技巧,在剪枝之前耗時3ms,剪枝之後耗時1ms,看來剪枝的作用還是很大的。本題的剪枝方法是,如果當前已經選擇的數的個數加上剩餘最多可以選擇的數的個數小於題目要求的個數k時,直接退出遞迴即可,因為根本無法選出k個數,這樣剪枝會減少很多不必要的遞迴。

需要記住這個小技巧.

class

solution

public

void

dfs(

int curr,

int pos,

int k,

int n)

else

if(pos > k || curr > n)

else

if(seq.

size()

+(n-curr +1)

else

}}

回溯 LeetCode77 組合(Python)

給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 回溯回溯 39.組合總和 77.組合 40.組合總和 ii 78.子集 90.子集 ii solution hui su suan fa by powca...

每日一題 leetcode 77 組合

組合 難度中等256 給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。示例 輸入 n 4,k 2 輸出 2,4 3,4 2,3 1,2 1,3 1,4 回溯法是一種選優搜尋法,按選優條件向前搜尋,已達到目標,但當搜尋到某一步時,發現原先選擇並不優或達不到目標,就退回一步重新選擇...

leetcode 77 組合 題解

給定兩個整數 n 和 k,返回 1 n 中所有可能的 k 個數的組合。其它方法 combinations和permutations返回的是物件位址,需要將iterator 轉換成list 即可 題解1 執行用時 48 ms,在所有 python3 提交中擊敗了95.61 的使用者 記憶體消耗 14....