1. 程式人生 > >LeetCode#279. Perfect Squares

LeetCode#279. Perfect Squares

  • 題意:給定一個數n,求最少能有多少個完全平方數,使得這些完全平方數的之和等於n

  • 思路:任意一個數x,都能表示為 x = a + b*b(即使x本身就是個完全平方數),因此求解x的最少完全平方數縮小為求解a的最少完全平方數,即求“最優子結構”,典型的動態規劃思想

  • 難度:Medium

  • 程式碼:

         public int numSquares(int n) {
            //int count = (int)Math.sqrt(n);
            int[] result = new int[n+1];
            Arrays.fill(result,Integer.MAX_VALUE);
    
            for(int i = 0; i*i <= n; i++)
                result[i*i] = 1;
            for(int i = 1; i <= n; i++){
                for(int j = 1; j*j <= i; j++){
                    result[i] = Math.min(result[i],result[i-j*j]+1);
                }
            }
    
            return result[n];
        }