首页 > 其他 > 详细

动态规划(分割整数)---按平方数分割整数

时间:2019-07-02 10:41:56      阅读:219      评论:0      收藏:0      [点我收藏+]

按平方数来分割整数

279. Perfect Squares(Medium)

题目描述:

For example, given n = 12, return 3 because 12 = 4 + 4 + 4; given n = 13, return 2 because 13 = 4 + 9.

思路分析:

??将n以内的平方数都求出来,然后设置数组dp[i],表示整数i按平方数分割的个数,则dp[n]表示整数n按平方数分割的个数,那么我们可以得到状态转移方程dp[i]=dp[i-square]+1。

代码:

public int numSquares(int n){
    List<Integer>squareList=generate(n); //生成n以内的所有平方数
    int []dp=new int[n+1];
    for(int i=1;i<=n;i++){
        int min=Integer.MAX_VALUE;
        for(int square:squareList){
            if(square>i) //平方数比当前的n还大,那么退出
                break;
            min=Math.min(min,dp[i-square]+1);
        }
        dp[i]=min;
    }
    return dp[n];
}
public List<Integer>generate(int n){ //生成平方数
    List<Integer>res=new ArrayList<>();
    int square=1;
    int diff=3;
    while(square<=n){
        res.add(square);
        square=square+diff;
        diff=diff+2;
    }
    return res;
}

动态规划(分割整数)---按平方数分割整数

原文:https://www.cnblogs.com/yjxyy/p/11118981.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!