この組み合わせ合計アルゴリズムをjavaからjavascriptに変換する方法

kenpeter

これが、組み合わせ和問題リートコードの質問です。

1つの回答コードはここjavaにあります。(または以下を参照)

public class Solution {
    public List<List<Integer>> combinationSum(int[] cands, int t) {
        Arrays.sort(cands); // sort candidates to try them in asc order
        List<List<List<Integer>>> dp = new ArrayList<>();
        for (int i = 1; i <= t; i++) { // run through all targets from 1 to t
            List<List<Integer>> newList = new ArrayList(); // combs for curr i
            // run through all candidates <= i
            for (int j = 0; j < cands.length && cands[j] <= i; j++) {
                // special case when curr target is equal to curr candidate
                if (i == cands[j]) newList.add(Arrays.asList(cands[j]));
                // if current candidate is less than the target use prev results
                else for (List<Integer> l : dp.get(i-cands[j]-1)) {
                    if (cands[j] <= l.get(0)) {
                        List cl = new ArrayList<>();
                        cl.add(cands[j]); cl.addAll(l);
                        newList.add(cl);
                    }
                }
            }
            dp.add(newList);
        }
        return dp.get(t-1);
    }
}

javascriptで変換する必要があります。

これが私の試みです。

function sortFunc(a, b) {
    return a-b;
}

function combinationSum(cands, t) {
    cands.sort(sortFunc);

    let dp = []; //[[[]]];

    for (let i = 1; i <= t; i++) {

        console.log('-- i --');
        console.log(i);

        let newList = []; // [[]];

        for (let j = 0; j < cands.length && cands[j] <= i; j++)
        {
            console.log('-- j --');
            console.log(j);

            if (i === cands[j]) {

                console.log('-- push --');
                console.log(i);

                newList.push([cands[j]]);
            }
            else {
                // list of int
                let myListList = dp[i-cands[j]-1];

                for(let k=0; k<myListList.length; k++) {
                    let myList = myListList;

                    if(cands[j] <= myList[0]) {
                        myListList.unshift([cands[j]]);
                        newList.push(myListList);
                    }
                }
            }
        }

        dp.push(newList);
    }

    return dp[t-1];
}

let arr = [2, 3, 5];
let t = 15;
let out = combinationSum(arr, t);
console.log(out);

コードについてはある程度理解していますが、あまり理解していません。現在、私のJavaScriptは無限ループになっています。

誰かが理由を知っていますか?または、「組み合わせの合計」のより良い解決策がある場合はどうなりますか?

マークマイヤー

最後のforループでレールから少し外れ、myNewListループの長さに基づいてループの内側に追加し続けたため、ループは終了しませんでした。

これは、オリジナルにかなり近いバージョンです。

function sortFunc(a, b) {
  return a - b;
}

function combinationSum(cands, t) {
  cands.sort(sortFunc);

  let dp = []; //[[[]]];

  for (let i = 1; i <= t; i++) {
    let newList = []; // [[]];

    for (let j = 0; j < cands.length && cands[j] <= i; j++) {
      if (i === cands[j]) {
        newList.push([cands[j]]);
      } else {
        for (l of dp[i - cands[j] - 1]) {  // for of is similar to `for (List<Integer> l : dp.get(i-cands[j]-1))`
          if (cands[j] <= l[0]) {
            let cl = [cands[j], ...l]     // use spread ...l to get ArrayList.addall() behavior
            newList.push(cl)
          }
        }
      }
    }
    dp.push(newList);
  }

  return dp[t - 1];
}

let arr = [2, 3, 5, 4];
let t = 7;
let out = combinationSum(arr, t);
console.log(out);

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

分類Dev

合計の最大の組み合わせを実装するためのソートアルゴリズム

分類Dev

この組み合わせアルゴリズムの時間計算量

分類Dev

これらの順列および組み合わせアルゴリズムの時間計算量を計算するにはどうすればよいですか?

分類Dev

この組み合わせアルゴリズムのパフォーマンスを向上させますか?

分類Dev

可能な組み合わせとアルファベットアルゴリズムへの変換-Javascript(Facebookからの質問)

分類Dev

配列からサイズnのすべての組み合わせを取得するアルゴリズム(Java)?

分類Dev

リストのリストからすべての組み合わせを取得します(組み合わせアルゴリズム)

分類Dev

すべての組み合わせとそれらの組み合わせのすべてのグループを作成できるアルゴリズム

分類Dev

nからk個の要素のすべての組み合わせを返すアルゴリズム

分類Dev

この組み合わせアルゴリズムをより効率的に作成するにはどうすればよいですか?

分類Dev

合計が値以下である最長の組み合わせを見つけるアルゴリズム

分類Dev

再帰的アルゴリズムを変換して、すべての組み合わせを反復に生成します

分類Dev

単一のセットから特定のサイズのすべての組み合わせを生成するPHPアルゴリズム

分類Dev

最良の組み合わせを得るためのアルゴリズム

分類Dev

ベクトルのリストからすべての可能な組み合わせを作成するアルゴリズム関数

分類Dev

特定の数をチェックするためのアルゴリズムは、特定の配列内の組み合わせの合計です。

分類Dev

nからk個の要素の「アンチグレー」オンデマンドの組み合わせを生成するためのアルゴリズム

分類Dev

クイズで可能なすべての回答の組み合わせを作成するアルゴリズム

分類Dev

k文字のサイズnの組み合わせを生成するためのアルゴリズム

分類Dev

Java:整数のセットのすべての可能な組み合わせを行列のリストに配置するアルゴリズム

分類Dev

PythonからC ++へ:再帰を使用してKnapsackのすべての組み合わせを一覧表示するアルゴリズム

分類Dev

読みやすい組み合わせを提示するためのアルゴリズム

分類Dev

組み合わせを見つけるためのアルゴリズムを構築する方法。その合計は数値に最も近く、その差はc#の範囲内にあります。

分類Dev

Java組み合わせアルゴリズム

分類Dev

文字列のすべての組み合わせを生成するアルゴリズム

分類Dev

すべての文字列の組み合わせを生成するアルゴリズム

分類Dev

この組み合わせアルゴリズムを変更して、cuda対応のGPUで並行して実行するにはどうすればよいですか?

分類Dev

要素の休閑の組み合わせを取得するための優れたアルゴリズム

Related 関連記事

  1. 1

    すべての組み合わせを見つけるためのこのアルゴリズムの時間計算量はどれくらいですか?

  2. 2

    合計の最大の組み合わせを実装するためのソートアルゴリズム

  3. 3

    この組み合わせアルゴリズムの時間計算量

  4. 4

    これらの順列および組み合わせアルゴリズムの時間計算量を計算するにはどうすればよいですか?

  5. 5

    この組み合わせアルゴリズムのパフォーマンスを向上させますか?

  6. 6

    可能な組み合わせとアルファベットアルゴリズムへの変換-Javascript(Facebookからの質問)

  7. 7

    配列からサイズnのすべての組み合わせを取得するアルゴリズム(Java)?

  8. 8

    リストのリストからすべての組み合わせを取得します(組み合わせアルゴリズム)

  9. 9

    すべての組み合わせとそれらの組み合わせのすべてのグループを作成できるアルゴリズム

  10. 10

    nからk個の要素のすべての組み合わせを返すアルゴリズム

  11. 11

    この組み合わせアルゴリズムをより効率的に作成するにはどうすればよいですか?

  12. 12

    合計が値以下である最長の組み合わせを見つけるアルゴリズム

  13. 13

    再帰的アルゴリズムを変換して、すべての組み合わせを反復に生成します

  14. 14

    単一のセットから特定のサイズのすべての組み合わせを生成するPHPアルゴリズム

  15. 15

    最良の組み合わせを得るためのアルゴリズム

  16. 16

    ベクトルのリストからすべての可能な組み合わせを作成するアルゴリズム関数

  17. 17

    特定の数をチェックするためのアルゴリズムは、特定の配列内の組み合わせの合計です。

  18. 18

    nからk個の要素の「アンチグレー」オンデマンドの組み合わせを生成するためのアルゴリズム

  19. 19

    クイズで可能なすべての回答の組み合わせを作成するアルゴリズム

  20. 20

    k文字のサイズnの組み合わせを生成するためのアルゴリズム

  21. 21

    Java:整数のセットのすべての可能な組み合わせを行列のリストに配置するアルゴリズム

  22. 22

    PythonからC ++へ:再帰を使用してKnapsackのすべての組み合わせを一覧表示するアルゴリズム

  23. 23

    読みやすい組み合わせを提示するためのアルゴリズム

  24. 24

    組み合わせを見つけるためのアルゴリズムを構築する方法。その合計は数値に最も近く、その差はc#の範囲内にあります。

  25. 25

    Java組み合わせアルゴリズム

  26. 26

    文字列のすべての組み合わせを生成するアルゴリズム

  27. 27

    すべての文字列の組み合わせを生成するアルゴリズム

  28. 28

    この組み合わせアルゴリズムを変更して、cuda対応のGPUで並行して実行するにはどうすればよいですか?

  29. 29

    要素の休閑の組み合わせを取得するための優れたアルゴリズム

ホットタグ

アーカイブ