1. 程式人生 > >leetcode Perfect Squares

leetcode Perfect Squares

一個數可以寫幾個數的平方數,最少的平方的個數

解題思路:動態規劃   dp[i]=min(dp[i-j*j]+1)  j=1,2,..m   m=sqrt(i)

public static void main(String[] args) {
        int num=12;
        int i = numSquares(num);
        System.out.println(i);


    }
    public static int numSquares(int n) {
        int m=(int)Math.sqrt(n);
        int[] arr=new int[n+1];
        arr[0]=0;
        arr[1]=1;
        for(int i=1;i<=n;i++){
            int min=Integer.MAX_VALUE;
            for(int j=1;j<=m;j++){
                if(j*j<=i){
                    min=Math.min(min,arr[i-j*j]+1);
                }
            }
            arr[i]=min;
        }
        return arr[n];
    }