Perfect Squares

简介: Perfect Squares Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, .

Perfect Squares

Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16, ...) which sum to n.

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

超时:

class Solution {
public:
    int numSquares(int n) {
        if(n<=0)
            return 0;
        int sqr=1;
        vector<int> vec;
        while(sqr*sqr<=n)
        {
            vec.push_back(sqr*sqr);
            ++sqr;
        }
        vector<int> path;
        int ret=INT_MAX;
        helper(vec,n,path,ret,0);
        return ret;
    }
    void helper(vector<int> &vec,int n,vector<int> &path,int &ret,int start)
    {
        if(n==0)
        {
            int len=path.size();
            if(len<ret)
                ret=len;
            return;
        }
        if(n<0)
            return;
        for(int i=start;i<vec.size();++i)
        {
            if(path.size()<ret)
            {
                path.push_back(vec[i]);
                helper(vec,n-vec[i],path,ret,i);
                path.pop_back();
            }
            else
                break;
        }
    }
};

改进:

class Solution {
public:
    int numSquares(int n) {
        int dp[n+1];
        for(int i=0;i<=n;++i)
        {
            dp[i]=i;
            for(int j=0;j*j<=i;++j)
            {
                dp[i]=min(dp[i],1+dp[i-j*j]);
            }
        }
        return dp[n];
    }
};

 

相关文章
codeforces 285C - Building Permutation
题目大意是有一个含n个数的数组,你可以通过+1或者-1的操作使得其中的数是1--n中的数,且没有重复的数。 既然是这样的题意,那么我就应该把原数组中的数尽量往他最接近1--n中的位置放,然后求差绝对值之和,但有多个数,怎么使他们和最小,这样就要对其进行排序了,直接按大小给它们安排好位置,然后计算。
34 0
|
5月前
Gym 102394 I. Interesting Permutation(DP)
【7月更文挑战第3天】
40 7
UVa11296 - Counting Solutions to an Integral Equation(枚举技巧)
UVa11296 - Counting Solutions to an Integral Equation(枚举技巧)
50 0
LeetCode 279. Perfect Squares
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
70 0
LeetCode 279. Perfect Squares
LeetCode 221. Maximal Square
在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
63 0
LeetCode 221. Maximal Square
LeetCode 367. Valid Perfect Square
给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
98 0
LeetCode 367. Valid Perfect Square
|
索引
LeetCode 413. Arithmetic Slices
如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。
103 0
LeetCode 413. Arithmetic Slices
LeetCode 216. Combination Sum III
找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。
106 0
LeetCode 216. Combination Sum III