题意:给定一个数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]; }更多参照:
https://leetcode.com/problems/perfect-squares/#/solutions
LeetCode#279. Perfect Squares
最新推荐文章于 2025-02-07 13:54:13 发布
本文介绍了一种使用动态规划解决如何用最少数量的完全平方数之和表示给定整数n的方法。通过逐步缩小问题规模,找到最优子结构,并最终给出了解决方案。

3975

被折叠的 条评论
为什么被折叠?



