40 - 77
有多個相同的元素,但要組成沒有重複的組合,有兩個方法做:
參考39題的做法,用set避免重複組合
參考39題的做法,但可以讓同一層的數字不重複
//set
class solution
if(target <
0|| i >= candidates.
size()
|| target < candidates[i]
)return
;for
(int k = i; k < candidates.
size()
; k++)}
public:
vectorint>>
combinationsum2
(vector<
int>
& candidates,
int target)
;sort
(candidates.
begin()
, candidates.
end())
;helper
(candidates, target,0)
;return ans;}}
;
//讓處於同一層中(dfs樹),沒有重複的數字
class solution
for(
int k = i; k < candidates.
size()
; k++)}
public:
vectorint>>
combinationsum2
(vector<
int>
& candidates,
int target)
;sort
(candidates.
begin()
, candidates.
end())
;helper
(candidates, target,0)
;return ans;}}
;
做法與39題類似
class solution
for(
int j = start; j <= n; j++)}
public:
vectorint>>
combine
(int n,
int k)
;helper
(n, k,0,
1);return ans;}}
;
不重複排列的生成
全排列的話比較好打。可,當乙個集合中有許多重複的元素,如 如何生成不重複的排列?易知答案只有乙個。生成不重複排列,這很實用。思想 把重複的數字不在看做多個元素,而是看做乙個元素的多個個數。然後遞迴生成時,新增在答案裡的是次數的減少。正確性 如果按照以上思路,那麼可以知道,每個因為我們把重複的元素當做...
記 不重複的數字
描述 把兩個整數的加法 減法 乘法這三個運算的得數,按照從小到大的順序輸出。如果得數中有重複的數字,那麼只要輸出一次。輸入兩個整數a和b 輸出把a b a b a b這三個數字按從小到大的順序輸出。如果其中有重複的數字,那麼只要輸出一次。每兩個數字之間保留乙個空格,最後不要換行。樣例輸入 2 0樣例...
提取不重複的整數
題目描述 輸入乙個 int 型整數,按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。輸入描述 輸入乙個 int 型整數。輸出描述 按照從右向左的閱讀順序,返回乙個不含重複數字的新的整數。示例1 輸入 9876673 輸出 37689 示例 1 網頁 ok linux 也 ok linux 編...