(エンコード問題は、候補 arr の各要素の回数が目標に達するすべての組み合わせの解を生成することです。制限されていません。)
2D[][]int
スライス theList
再帰で参照によって渡され、 []int
(tmpCombo
) が追加されますが、その後追加すると、要素の 1 つが変更され、[3 3 3 3 3 3]
が [3 3 3 3 3 2]
に変更されます。したがって、append()
を実行する前に tmpCombo
をコピーする必要があります。 append(arr, ele)
元の arr
スライスは変更されましたか?そうであれば、元の arr
がさらに変更されるのを観察する必要がありますが、これは 1 回しか起こりません。そのため、このスライス append()
がどのように機能するかについて、実際には混乱しています。
https://go.dev/play/p/PH10SxiF7A5
リーリー(for ループを実行してスライスに追加し続けてみましたが、元のスライスはまったく変更されませんでした...)
<code> ... theList: [.... [3 3 3 3 3 3]] theList: [.... [3 3 3 3 3 2] [3 3 3 3 2 2 2]] </code>
この回答は同じ問題を示しているので、理解できましたhttps://www.php.cn/link/0d924f0e6b3fd0d91074c22727a53966一个>.
基本的に、スライスが指定された容量で 1 つの場所にデータを保存するが、長さは別のプロパティとして持つ場合...私の場合、複数の append(tmpCombo, target)
データtmpCombo
は、変数が新しい長さで再割り当て/更新されず、同じ場所にある基になるデータが (再割り当てされない場合に) 変更されるため、実際には変更されます。
make()
新しいスライスを作成し、copy()
終了 (make()
特定の容量を割り当てる)
. (append()
はより多くのメモリを割り当てる可能性がありますが、頻繁な変更に適しています)
以上がappend() は元のスライス (2D スライスを再帰的に) 変更する可能性がありますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。