第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

我在可視化組合和問(wèn)題的遞歸調(diào)用時(shí)遇到了一些麻煩?

我在可視化組合和問(wèn)題的遞歸調(diào)用時(shí)遇到了一些麻煩?

慕的地6264312 2021-06-01 09:11:05
問(wèn)題是在排序數(shù)組中找到總和為給定目標(biāo)值的所有唯一組合。在這個(gè)例子中,假設(shè)候選者=[2,3,6,7] 和目標(biāo)=7。我看了一些視頻,現(xiàn)在我了解了如何解決這個(gè)問(wèn)題的一般算法。我還查看了一個(gè)解決方案,但是在可視化函數(shù)中的遞歸樹/每個(gè)遞歸調(diào)用時(shí)遇到了一些麻煩。var combinationSum = function(candidates, target) {    candidates.sort((a,b) => a-b)    let result = []    combSum(candidates, target, [], result, 0)    return result };function combSum(candidates, target, current, result, idx) {    let n    for (let i = idx; i < candidates.length; i++) {        n = candidates[i]        current.push(n)        if (n === target) {            result.push([...current])        } else if (target > n) {             combSum(candidates, target-n, [...current], result, i)        }        current.pop()    } }我知道第一步是嘗試從數(shù)組中的第一個(gè)值 2 開始的組合。所以函數(shù)將嘗試 [2],然后是 [2,2],然后是 [2,2,2],此時(shí)目標(biāo)是小于 n 的 1,因此它跳過(guò) if 語(yǔ)句并彈出最后 2 個(gè)。pop() 方法是否隱式返回調(diào)用堆棧上的前一個(gè)函數(shù)調(diào)用?它會(huì)返回一個(gè)從未實(shí)際使用過(guò)的值 2,這是正確的嗎?沒(méi)有讓我失望的基本案例。另外,我知道由于數(shù)組已排序,我們應(yīng)該知道如果像 [2,2,3,3] 這樣的東西不起作用,那么以 [2,2,3] 前綴開頭的任何其他組合也將起作用不行。我不明白代碼是如何解決這個(gè)問(wèn)題的——它怎么知道“跳過(guò)”這些組合?像 [2,2,3,6] 等。編輯:真的很晚了,我在我原來(lái)的帖子中意識(shí)到我正在尋找一個(gè)不同的目標(biāo)值,這增加了我的困惑......我修復(fù)了我的帖子以反映這一點(diǎn)。對(duì)不起!!
查看完整描述

1 回答

?
HUX布斯

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超6個(gè)贊

該答案并未涉及可視化方面,而是僅限于您對(duì)特定細(xì)節(jié)的問(wèn)題。

預(yù)賽

遞歸基于這樣的思想,即在對(duì)目標(biāo)求和的組合的增量構(gòu)造中的任何一步,都需要針對(duì)原始目標(biāo)與使用相同集合的當(dāng)前部分組合之和的差異來(lái)解決原始問(wèn)題的候選人。

combSum攜帶的參數(shù)含義如下:

  • candidates:要從中挑選的數(shù)字池(有序數(shù)組)

  • target: 要組合的數(shù)字(整數(shù))

  • current: 當(dāng)前正在完成的部分組合(有序數(shù)組)

  • result:到目前為止發(fā)現(xiàn)的組合
    (偽字典序排列的數(shù)組 - 前綴在它們的延續(xù)之后)

  • idx:candidates要在調(diào)用中使用的元素的最小索引。

在概念上candidatesidx折疊成單個(gè)實(shí)參candidates.slice(i)。

遞歸中有2個(gè)不變量:

  • current表示當(dāng)前完成的部分構(gòu)造組合的數(shù)組中的元素是非遞減的。

  • 該序列是從左到右構(gòu)建的。
    特別是,沒(méi)有遞歸調(diào)用會(huì)更改current調(diào)用時(shí)存在的元素。

候選的排序有助于避免相同序列的重復(fù)構(gòu)造。請(qǐng)記住,在每次遞歸調(diào)用的有效候選元素是candidates.slice(i)i非遞減,并在每個(gè)遞歸級(jí)別的循環(huán),這個(gè)層次的i起始值開始與當(dāng)前值i從父級(jí)。

請(qǐng)注意,這僅candidates在結(jié)果組合中沒(méi)有出現(xiàn)重復(fù)數(shù)字時(shí)才有效,否則以該數(shù)字開頭的子序列將被多次計(jì)算產(chǎn)生幾個(gè)相同的結(jié)果( TrycombinationSum([1,4], 4)combinationSum([1,1,4], 4); 準(zhǔn)確地說(shuō),如果多重性incandidates將等于每個(gè)結(jié)果的多重性......嘗試combinationSum([2,2,5], 9)combinationSum([2,5], 9)

1.遞歸基
遞歸基是這樣的n >= target...

2. 跳過(guò)'不可能'前綴 ...如果n === target,當(dāng)前部分組合完成并添加到結(jié)果中。如果n > target當(dāng)前的部分組合不能成功完成(候選數(shù)字只會(huì)變大,當(dāng)前的已經(jīng)太大了)。但是,代碼不適合這種情況(它可以if (n > target) break;在循環(huán)結(jié)束時(shí)使用語(yǔ)句)。

3.隱式返回 current.pop()恢復(fù)combSumstarted的當(dāng)前調(diào)用的部分組合。這是它的目的。雖然技術(shù)上pop返回了一些值,但是這個(gè)值已經(jīng)被使用了——它是current遞歸調(diào)用站點(diǎn)的頂部元素!


查看完整回答
反對(duì) 回復(fù) 2021-06-03
  • 1 回答
  • 0 關(guān)注
  • 116 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)