给出一个数字n,它可以由若干个完全平方数相加得到。这道题目需要求出,所需要的完全平方数的最小数量。
求最小的问题,可以用广度优先搜索算法(BFS)求解。不难想出,这些完全平方数肯定比n要小。因此,我新建一个数组,称为完全平方数组,来保存所有比n小的完全平方数。当然,如果在这个过程中,发现n本身就是完全平方数,那么直接输出1即可。
接下来,使用BFS求解。新建bfs数组,BFS是每一步都需要求出所有情况。比如当有一个完全平方数时,列出完全平方数组中的值即可。当增加一个完全平方数时,使完全平方数组中的数两两相加,并删除只有一个完全平方数的情况,这样数组中全部是两个完全平方数相加的情况。这样,每增加一个完全平方数,使数组中的每个值与完全平方数组中所有值分别相加。在这个过程中,如果遇到某一种情况的和为n,输出记录的完全平方数个数。
08-09
08-09