如:{1,2,3,4,5} S = 3
则结果为:
1 1 0 0 0
0 0 1 0 0
public class Solution { /** * * @param S 目标和 * @param src 源数组 * @param trace 路径,以0或1代表源数组相应位置下是否被纳入 * @param k 源数组index * @param sum 此时已被纳入的和 * @param r 源数组中从k+1到src.length的所有数之和 */ public static void sumOfAll(int S, int[] src, int[] trace, int k, int sum, int r){ if (sum == S){ for (int i = 0; i < k; i ++){ System.out.print(trace[i] + " "); } System.out.println(""); return; } if (k < src.length){ if (sum + src[k] <= S && sum + r > S){ sum += src[k]; r -= src[k]; trace[k] = 1; sumOfAll(S, src, trace, k+1, sum, r); sum -= src[k]; r += src[k]; trace[k] = 0; } if (sum < S && sum + r - src[k] > S){ r -= src[k]; trace[k] = 0; sumOfAll(S, src, trace, k+1, sum, r); r += src[k]; } } } public static void sumOfAll(int S, int[] src){ int[] trace = new int[src.length]; int r = 0; for (int i = 0; i < src.length; i ++){ r += src[i]; } sumOfAll(S, src, trace, 0, 0, r); } public static void main(String[] args){ int[] src = {1, 2, 3, 4, 5, 6}; sumOfAll(6, src); } }