74 BFS和动态规划解完全平方数

问题描述:给定正整数n,找到若干个完全平方数(比如1,4,9,16)使得他们的和等于n,你需要让组成和的完全平方数的个数最少。给你一个整数,返回和为n的完全平方数的最少数量,完全平方数是一个整数,其值等于另一个蒸熟的平方,换句话说,其值等于一个整数自乘的乘积。

DFS求解:定义动态数组dp[i]表示找到若干完全平方数的,其和等于n的最小数量,可基于sqrt(n)+1这个范围内遍历完全平方数

public int minSquereSum(int n)
{
int []dp=new int[n+1];

for(int i=1;ii)
{
break;
}else
{
dp[i]=Math.min(dp[i],dp[i-j*j]+1);
}
}
}
return dp[n];
}

BFS求解:对于每一层可以把满足条件的和放入队列中,直到有一层可以等于n,则返回这个level即可。

public int bfs(int n)
{
Queuequeue=new LinkedList<>();
int level=1;
queue.add(0);
Setset=new HashSet();
while(!queue.isEmpty())
{
int queuesize=queue.size();
for(int i=0;in)
{
break;
}else if(j*j+tempsize==n)
{
return level;
}else
{
if(set.contains(j*j+tempsize))
{
continue;
}else
{
set.add(j*j+tempsize);
queue.add(j*j+tempsize);
}
}
}
}
level++;
}
​​​​​​​return level;
}

你可能感兴趣的:(JAVA刷题500道,宽度优先,动态规划,算法,java)