给定一个正整数n,找到比n小的完美平方数相加和等于n的最小数目。
2017-11-25 10:46
966 查看
本题源自leetcode
----------------------------------------------------------------
思路:
动态规划。用一个vector保存整数 i 需要的最小平方和数。
1 初始化一个vector. v[0]=0;然后循环当数组的数小于 n 时。遍历每一个需要的最小平方数的和
代码:
int numSquares(int n) {
if(n<=0)
return 0;
vector<int> vec;
vec.push_back(0);
while(vec.size()<=n){
int m=vec.size();
int minNum=INT_MAX;
for(int i=1;i*i<=m;i++){ //保存和等于m的最小的平方数
minNum=min(minNum,vec[m-i*i]+1);
}
vec.push_back(minNum);
}
return vec
;
}
代码2:
int numSquares(int n) {
if(n<=0)
return 0;
vector<int> vec(n+1,INT_MAX);
vec[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j*j<=i;j++){
vec[i]=min(vec[i],vec[i-j*j]+1);
}
}
return vec
;
}
----------------------------------------------------------------
思路:
动态规划。用一个vector保存整数 i 需要的最小平方和数。
1 初始化一个vector. v[0]=0;然后循环当数组的数小于 n 时。遍历每一个需要的最小平方数的和
代码:
int numSquares(int n) {
if(n<=0)
return 0;
vector<int> vec;
vec.push_back(0);
while(vec.size()<=n){
int m=vec.size();
int minNum=INT_MAX;
for(int i=1;i*i<=m;i++){ //保存和等于m的最小的平方数
minNum=min(minNum,vec[m-i*i]+1);
}
vec.push_back(minNum);
}
return vec
;
}
代码2:
int numSquares(int n) {
if(n<=0)
return 0;
vector<int> vec(n+1,INT_MAX);
vec[0]=0;
for(int i=1;i<=n;i++){
for(int j=1;j*j<=i;j++){
vec[i]=min(vec[i],vec[i-j*j]+1);
}
}
return vec
;
}
相关文章推荐
- LeetCode试题之““给定一个正整数A,找到最小的正整数B,它的每一个数字的乘法等于A。””
- 给定一个正整数x,找到一个最小的正整数y,使得y的每一位相乘,最后值等于x
- 题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。 解答: 分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解
- (笔试中的题目)一个已经排序好的数组找到两个数字相加等于一个给定的数
- 给定一个正整数n,找到小于或等于n的非负整数,其二进制表示不包含连续的整数。
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
- 给一个整数数组,找到两个数使得他们的和等于一个给定的数 target(容易)
- 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
- 输入一个正整数n,返回一个最小正整数m(m至少是2位数),使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,对于某个n不存在这样的m,请返回-1。
- 给出一个数组 求任意个数的数相加的和等于给定数 输出所有满足条件的数
- 给定一个无序的整型数组arr,找到其中最小的k个数。
- JAVA函数实现任意给定一组数, 找出任意数相加等于某数或者在一个范围
- 任意给定一个正整数N,求一个最小的正整数M(M>1),使得N*M的十进制表示形式里只含有1和0。
- 给定任意一个正整数,求比这个数大且最小的“不重复数”
- 整型数组处理算法(九)给定任意一个正整数,求比这个数大且最小的“不重复数”(性能优化)[2014百度笔试题]
- 给定一个正整数,编写程序计算有多少对质数的和等于输入的这个正整数,并输出结果。输入值小于1000。
- 给一个正整数 n, 找到若干个完全平方数(比如1, 4, 9, ... )使得他们的和等于 n。你需要让平方数的个数最少。
- 给定一个集合和一个正整数c,判定是否存在该集合的子集,使其所有元素的和等于给定的正整数c?
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?