給定一個正整數n,找到比n小的完美平方數相加和等於n的最小數目。
阿新 • • 發佈:2019-01-22
本題源自leetcode
----------------------------------------------------------------
思路:
動態規劃。用一個vector儲存整數 i 需要的最小平方和數。
1 初始化一個vector. v[0]=0;然後迴圈當陣列的數小於 n 時。遍歷每一個需要的最小平方數的和
程式碼:
int numSquares(int n) { if(n<=0) return 0; vector<int> vec; vec.push_back(0); while(vec.size()<=n){ int m=vec.size(); int minNum=INT_MAX; for(int i=1;i*i<=m;i++){ //儲存和等於m的最小的平方數 minNum=min(minNum,vec[m-i*i]+1); } vec.push_back(minNum); } return vec[n]; }
程式碼2:
int numSquares(int n) { if(n<=0) return 0; vector<int> vec(n+1,INT_MAX); vec[0]=0; for(int i=1;i<=n;i++){ for(int j=1;j*j<=i;j++){ vec[i]=min(vec[i],vec[i-j*j]+1); } } return vec[n]; }