leetcode279. 完全平方数
生活随笔
收集整理的這篇文章主要介紹了
leetcode279. 完全平方数
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一:題目
二:上碼
class Solution { public:/**思路:1.分析題意這個(gè)就是將一個(gè)數(shù)分成幾個(gè)數(shù)的和;然而的話,這幾個(gè)數(shù)必須的是完全平方數(shù),我們要求的是最少數(shù)量的完全平方數(shù)這個(gè)滿足答案的有好幾個(gè);但是我們要求的是最少的數(shù)量2.動(dòng)態(tài)規(guī)劃五步走1>:確定dp數(shù)組的含義以及下標(biāo)的含義dp[j] 表示的是背包容量為 j (也就是我們的這個(gè)整數(shù)n)的時(shí)候,最少的完全平方數(shù)的數(shù)量;2>:確定dp數(shù)組的狀態(tài)遞推公式我們還可以確定的是這個(gè)i是不會(huì)超過一半的n的dp[j] = min(dp[j],dp[j-i*i]+1) 這個(gè)加1就好比我們加上我們的這個(gè)物品 也就是本題中的i*i3>:確定dp數(shù)組的初始化因?yàn)檫@個(gè)我們是要求最少值 所以我們依然是初始化為最大值4>:確定dp數(shù)組的遍歷順序有重復(fù)的元素所以正序5>:舉例驗(yàn)證n = 50 1 2 3 4 51*1 0 1 2 3 4 5 2*2 0 1 2 3 1 23.總結(jié)我們求解的dp[j] 放著的是我們數(shù)量 而并不是我們具體的數(shù)值;我們需要轉(zhuǎn)換一種思維,就是將我們的求解目的直接放在我們的dp[j]中*/int numSquares(int n) {vector<int> dp(n+1,INT_MAX);dp[0] = 0;//這個(gè)得初始化為0,當(dāng)n==0的時(shí)候,我們是無法湊成最少數(shù)量的完全平方數(shù)for(int i = 1; i <= n/2; i++) {//遍歷物品//這里不能從0開始 因?yàn)閺?開始的話 那么dp[0] = IINT_MAX的了for(int j = 0; j <=n; j++) {//遍歷背包if(j >= i*i) //這里我們需要防止的是避免我們dp[j] = min(dp[j],dp[j-i*i]+1);}}return dp[n] == INT_MAX ? 1 : dp[n];} };
耶耶耶耶耶耶耶耶耶耶耶耶耶耶!!!沒看題解自己AC兩道了 菜雞杰要起飛了哈哈哈哈哈哈哈哈哈哈哈
總結(jié)
以上是生活随笔為你收集整理的leetcode279. 完全平方数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是痱子?
- 下一篇: leetcode139. 单词拆分