题意:给定一个数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
最新推荐文章于 2022-11-06 22:11:19 发布