求子集問題

2021-05-22 13:11:20 字數 1327 閱讀 5145

從訂閱部落格中看到這道題,於是花了上午的時間寫了一下,此題類似於

0-1揹包問題,故複習了一下,分別有遞迴和非遞迴的解法。

題目:給定乙個數

t,以及

n個整數,在這

n個整數中找到相加之和為

t的所有組合,例如

t = 4

,n = 6,這6

個數為[4, 3, 2, 2, 1, 1]

,這樣輸出就有

4個不同的組合,它們的相加之和為4:

4, 3+1, 2+2, and 2+1+1

。請設計乙個高效演算法實現這個需求。

遞迴解法:

privatestaticinta=;

privatestaticint

t=8;

privatestaticint

n=7;

privatestaticboolean

flags;

publicstaticintsubnum(ints,intr)elseelseelse */

} } }

非遞迴演算法:

private final static int n = 20;

private static int w = ;

// private static int w=; // 若原w

無序,則先對其排序

private final static int t = 20;

private static int stack = new int[20];

private static int stackidx;

private static void output()

system.out.println();

}private static void outstack()

system.out.println();

}public static void subnum() else else if (sum > 0) else

求子集 全排列

求子集 給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路 1 確定乙個tags標記陣列,用於確定某個元素是否被選擇 2 確定遞迴的終止條件為 確定元素是...

演算法 回溯 求子集2

給定乙個可能包含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 1,2,2 輸出 2 1 1,2,2 2,2 1,2 和演算法 回溯 位運算 求子集類似,只不過需要剔除相同的組合。class solution arrays.sort nums ...

leetcode 78 子集(位運算求子集)

給定一組不含重複元素的整數陣列 nums,返回該陣列所有可能的子集 冪集 說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 分析 含有n個元素的集合共有 1 一位後與 1的方式判斷最後一位是0還是1,如果是1,就把對應位置的數加入到...