My Seventy-first Page - 目标和 - By Nicolas
這篇page是針對leetcode上的494.目標(biāo)和所寫的。小尼先簡單的說明一下這道題的意思,就是給出一個(gè)整數(shù)數(shù)組nums和一個(gè)整數(shù)target,需要向數(shù)組中的每個(gè)整數(shù)前添加'+'或者'-',然后串聯(lián)起所有整數(shù),可以構(gòu)造一個(gè)表達(dá)式,返回可以通過上述方法構(gòu)造的、運(yùn)算結(jié)果等于target的不同表達(dá)式的數(shù)目。
首先呢小尼先簡單的說明一下這道題的解題思路,我們不要把這道題想的過于復(fù)雜,也不要將這道題想的過于簡單,其實(shí)這里可以寫+也可以寫-,其實(shí)無非就是構(gòu)造成正數(shù)或者是負(fù)數(shù),其實(shí)就是我們構(gòu)造兩個(gè)數(shù)組進(jìn)行對應(yīng)的賦值即可,一個(gè)數(shù)組里面全部都是賦值正數(shù),另一個(gè)里面全部都是賦值負(fù)數(shù)。我們?nèi)绻麑⑺械恼龜?shù)數(shù)組都定義為left,所有的負(fù)數(shù)數(shù)組都定義為right,那么我們定義一個(gè)sum=left+right,left-(sum-left)=target,那么我們通過上述三個(gè)式子我們可以推出一個(gè)結(jié)論就是,left=(target+sum)/2,然后我們需要的是滿足為target的組合,其實(shí)就直接轉(zhuǎn)換成了0-1背包問題,裝滿容器為x背包,有幾種方法。
小尼接下來繼續(xù)說明一下動(dòng)態(tài)規(guī)劃五部曲:
1、確定dp數(shù)組以及下標(biāo)的含義:dp[j]表示:填滿j(包括j)這么大容積的包,有dp[j]種方法
2、確定遞推公式:當(dāng)我們考慮到nums[i]的話,湊成dp[j]就有dp[j]-nums[i]種方法,這里其實(shí)就是類似于一個(gè)累加起來的方法
dp[j] += dp[j - nums[i]]
3、dp數(shù)組如何進(jìn)行初始化:從遞歸公式我們可以看出,在初始化的時(shí)候dp[0]一定要初始化為1,因?yàn)閐p[0]是在公式種一切遞推結(jié)果的起源,所以dp[0]一定只能是1,如果為0,那么之后的所有的結(jié)果都將是0
4、確定遍歷順序:跟我們之前說過的0-1背包問題一樣,nums放在外循環(huán),target在內(nèi)循環(huán),且內(nèi)循環(huán)倒序
5、最后就是導(dǎo)出dp數(shù)組
小尼接下來拉一下解題代碼:
class Solution {public int findTargetSumWays(int[] nums, int target) {int sum = 0;for(int i = 0; i < nums.length; i++) sum += nums[i];if((target + sum) % 2 != 0) return 0;int size = (target + sum) / 2;if(size < 0) size = - size;int[] dp = new int[size + 1];dp[0] = 1;for(int i = 0; i < nums.length; i++){for(int j = size; j >= nums[i]; j--){dp[j] += dp[j - nums[i]];}}return dp[size];} }小尼簡單的即使一下上述的代碼,其中有一個(gè)可以很直接判斷的條件,就是如果(target+sum)%2如果不為0,那么我們直接return false,其實(shí)這里如果不為0就是我們題目的條件給不出返回結(jié)果是算出的數(shù)的背包,其實(shí)就是我們不能組成的,然后接下來我們直接就是進(jìn)行對應(yīng)對遍歷,我們需要返回可以達(dá)到的方法數(shù),最后我們直接返回dp[size]。我們在這道題中先遍歷的是物品,然后再遍歷的是背包的容量,其實(shí)就是我們一個(gè)個(gè)記錄的操作,我們先放入第一個(gè)物品,然后我們記錄好dp數(shù)組,接下來我們繼續(xù)放入之后的物品,然后我們的dp數(shù)組根據(jù)之前已經(jīng)疊加了的數(shù)據(jù)進(jìn)行對應(yīng)的繼續(xù)增加,最后再返回我們的dp[size]的值
希望上述代碼可以幫助到小伙伴們~~~
總結(jié)
以上是生活随笔為你收集整理的My Seventy-first Page - 目标和 - By Nicolas的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 疫情期间华为面试总结
- 下一篇: 使用NoteExpress/Citesp