簡體   English   中英

子集和解java

[英]Sub set sum solution java

我需要使用recursionbacktracking編寫代碼,並且沒有任何循環可以找到方程式x1+x2+x3 = K所有可能解決方案,其中K是給定數字。 並且x1 , x2, x31 - 10之間的非零正整數。

我的嘗試:

public static int subSetSum(int i, int k, int A[]) {
    int sum = A[0] + A[1] + A[2];
    int noOfSolutions = 0;
    if(k - sum < 0 || i >= A.length)
        return 0;
    if(k - sum == 0) {
        System.out.println(A[0] + " + " + A[1] + " + " + A[2]);
        noOfSolutions =+ 1; }
    noOfSolutions = subSetSum(i+1,k,A);
    int newA[] = A;
    newA[i] = A[i]+1;
    noOfSolutions = subSetSum(i,k,newA);
    return noOfSolutions;
}

運行代碼我只會得到一個解決方案。 因此,如果嘗試找到6所有解決方案,它將只打印1+1+40 (對於沒有解決方案)。

  • (1)如果你想添加和賦值運算符是+ = ,不是= + (這將為noOfSolutions分配+1)
  • (2)你不需要一個新的向量,它也將是相同的(A和newA它將具有相同的內存地址,因此其中一個的更改將影響它們)
  • (3)您應該在遞歸調用后恢復堆棧更改

編輯

  • (4)你應該在解決方案后停止
public static int subSetSum(int i, int k, int A[]) {
    int sum = A[0] + A[1] + A[2];
    int noOfSolutions = 0;
    if(k - sum < 0 || i >= A.length)
        return 0;
    if(k - sum == 0) {
        System.out.println(A[0] + " + " + A[1] + " + " + A[2]);
--(1)-->    noOfSolutions += 1;
--(4)-->    return noOfSolutions;
    }
    noOfSolutions += subSetSum(i+1,k,A);
--(2)-->    A[i] = A[i]+1;
    noOfSolutions += subSetSum(i,k,A);
--(3)-->    A[i] = A[i]-1;
    return noOfSolutions;
}

為例

public static void main(String[] args) {
    System.out.println(subSetSum(0, 4, new int[3]));
}

產量

0 + 0 + 4
0 + 1 + 3
0 + 2 + 2
0 + 3 + 1
0 + 4 + 0
1 + 0 + 3
1 + 1 + 2
1 + 2 + 1
1 + 3 + 0
2 + 0 + 2
2 + 1 + 1
2 + 2 + 0
3 + 0 + 1
3 + 1 + 0
4 + 0 + 0
15

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM