從訂閱部落格中看到這道題,於是花了上午的時間寫了一下,此題類似於
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,就把對應位置的數加入到...