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


    按平方数来分割整数

    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;
    }
    
  • 相关阅读:
    Oracle SQL性能优化
    readystate, 异步
    DOMContentLoaded
    有限状态机(Finite-state machine)
    APPcache
    读取上传文件内容
    drag file upload xhr 拖拽异步上传文件
    web worker
    页面性能测试
    闭包用法,延迟tab
  • 原文地址:https://www.cnblogs.com/yjxyy/p/11116503.html
Copyright © 2020-2023  润新知