My Sixty-fifth Page - 整数拆分 - By Nicolas
這篇page是針對(duì)leetcode上的343.整數(shù)拆分所寫的。小尼先簡(jiǎn)單的說(shuō)明一下這題的題意,給定一個(gè)正整數(shù)n,將其拆分為k個(gè)正整數(shù),要求最后使得這個(gè)整數(shù)的乘積最大化。
小尼先簡(jiǎn)單的跟大家分析一下這道題的意思,其實(shí)就是我們需要做出最優(yōu)解的操作,我們可以想一下,我們拿到的整數(shù)是n,我們需要將其進(jìn)行對(duì)應(yīng)的拆分,我們可以將它拆成兩個(gè)或者是多個(gè),當(dāng)我們拆分成兩個(gè)數(shù)進(jìn)行相乘時(shí)是比較好判斷的,就是直接做一個(gè)for的循環(huán)進(jìn)行對(duì)應(yīng)的遍歷即可,而且求出來(lái)的結(jié)果也就j*(i-j),也就是我們將它分成的兩個(gè)數(shù)可以從一開(kāi)始進(jìn)行對(duì)應(yīng)的拆分,我們一個(gè)一個(gè)的與我們給出的n的減去我們遍歷進(jìn)行的數(shù)進(jìn)行乘法運(yùn)算
上面小尼跟大家講解了兩個(gè)數(shù)字的運(yùn)算,當(dāng)我們進(jìn)行多個(gè)數(shù)字的運(yùn)算的時(shí)候,我們這個(gè)時(shí)候就一定需要擁有最優(yōu)的思想,我們?cè)O(shè)置了一個(gè)內(nèi)置的for循環(huán),進(jìn)行我們的從一到n的之間所有的數(shù)字的一個(gè)最優(yōu)的dp的解,我們通過(guò)dp的最優(yōu)的解法在去做我們下一層的判斷,在座的各位可能聽(tīng)到小尼現(xiàn)在所說(shuō)的就有些許的迷惑了,小尼先拉一下對(duì)應(yīng)的動(dòng)態(tài)規(guī)劃的代碼:
class Solution {public int integerBreak(int n) {int[] dp = new int[n + 1];for(int i = 2; i <= n; i++){int curMax = 0;for(int j = 1; j < i ; j++){curMax = Math.max(curMax , Math.max(j * (i - j), j * dp[i - j]));}dp[i] = curMax;}return dp[n];} }小尼在最開(kāi)始看這段代碼的時(shí)候也是看的非常的迷惑的,其實(shí)小尼覺(jué)得貪心里面的奧秘就是我們的數(shù)組可以不斷地記錄我們前面情況的最優(yōu)解,可以使得我們后面的條件可以直接的調(diào)用,這里設(shè)置了dp數(shù)組,我們一直往里面記錄了1到n所有的數(shù)的dp的值,這個(gè)其實(shí)就是我們對(duì)最優(yōu)解的記錄,小尼也是現(xiàn)在這里跟大家解釋一下其中的一點(diǎn),就是我們雖然寫了兩層for循環(huán),其中外面那一層是用來(lái)記錄dp[i]的,而里面的那一層是遍歷從1到j(luò)的所有dp數(shù)據(jù)的最優(yōu)解,等到遍歷完了最優(yōu)解了之后我們?cè)賹?shù)據(jù)放入dp數(shù)組中,以便我們下一次判斷最優(yōu)解中j * dp[i - j]的利用。
總結(jié)
以上是生活随笔為你收集整理的My Sixty-fifth Page - 整数拆分 - By Nicolas的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 兀键和6键怎么判断_高中有机化学大兀键怎
- 下一篇: My Thirty-First Page
