动态规划中级教程 279. Perfect Squares
2017-08-07 16:07
148 查看
Given a positive integer n, find the least number of perfect square numbers (for example,
For example, given n =
我们知道这个一眼可以看到
dp【8】=dp【4】+1(因为8-4)也是一个完全平方数
我们这里直接列状态转移方程
dp【i】=min(dp【i】,dp【i-j*j】)class Solution {
public:
int numSquares(int n) {
if(n<=0)return 0;
int num=sqrt(n);
int dp[n+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<=num;i++)
{
dp[i*i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=num;j++)
{
if(i-j*j>0)
{
if(dp[i-j*j])
{
if(dp[i]==0)
{
dp[i]=dp[i-j*j]+1;
}
else
{
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
}
}
}
return dp
;
}
};
1, 4, 9, 16, ...) which sum to n.
For example, given n =
12, return
3because
12 = 4 + 4 + 4; given n =
13, return
2because
13 = 4 + 9.
我们知道这个一眼可以看到
dp【8】=dp【4】+1(因为8-4)也是一个完全平方数
我们这里直接列状态转移方程
dp【i】=min(dp【i】,dp【i-j*j】)class Solution {
public:
int numSquares(int n) {
if(n<=0)return 0;
int num=sqrt(n);
int dp[n+1];
memset(dp,0,sizeof(dp));
for(int i=1;i<=num;i++)
{
dp[i*i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=num;j++)
{
if(i-j*j>0)
{
if(dp[i-j*j])
{
if(dp[i]==0)
{
dp[i]=dp[i-j*j]+1;
}
else
{
dp[i]=min(dp[i],dp[i-j*j]+1);
}
}
}
}
}
return dp
;
}
};
相关文章推荐
- 动态规划中级教程 646. Maximum Length of Pair Chain
- 动态规划中级教程 377. Combination Sum IV
- 动态规划中级教程300.Longest Increasing Subsequence
- 动态规划中级教程(leetcode)152.Maximum Product Subarray
- 动态规划中级教程 322. Coin Change
- 动态规划中级教程 343. Integer Break
- Android中级教程——UI专题
- mybatis学习教程中级(六)一对一查询
- Android[中级教程]第二章 数据存储之File
- Android[中级教程]第四章 单元测试AndroidTestCase
- Android[中级教程]第五章 XML解析之PULL解析器
- Android中级教程(一)之----手机页面的转换setContentView的应用
- springMVC教程中级(四)Controller中级篇1(回传、批量)
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
- 微信小程序教学第二章(含视频):小程序中级实战教程之预备篇 - 封装网络请求及 mock 数据
- iOS AutoLayout自动布局中级开发教程(7)-底部顶部baseLine基线对齐
- SpringBoot中级教程之SpringBoot自定义配置(十一)
- Android中级教程之----Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- HTML中级教程 自定义列表