首页 > 代码库 > LeetCode Perfect Squares
LeetCode Perfect Squares
Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 16,
...) which sum to n. For example, given n = 12 , return 3 because 12 = 4 + 4 + 4 ; given n =
13 , return 2 because 13 = 4 + 9 .
题目翻译: 给出一个正整数 n ,求至少需要多少个完全平方数(例如1,4,9,16……)相加能得到n。
例如,给出 n = 12 ,返回3,因为 12 = 4 + 4 + 4 。给出 n = 13 ,返回2,因为 13 = 4 + 9 。
具体来说,我们用一个数组来记录已有的结果,初始化为正无穷( INT_MAX )。外层循环变量 i 从 0 到 n ,
内层循环变量 j 在 i 的基础上依次加上每个整数的完全平方,超过 n 的不算。那么 i + j*j 这个数需要
的最少的完全平方数的数量,就是数组中当前的数值,和 i 位置的数值加上一,这两者之间较小的数字。
如果当前的值较小,说明我们已经找到过它需要的完全平方数的个数(最初都是正无穷)。否则的话,说
明在 i 的基础上加上 j 的平方符合条件,所需的完全平方数的个数就是 i 需要的个数加上一。
import java.util.Arrays;class Solution { public int numSquares(int n) { int[] dp = new int[n + 1]; Arrays.fill(dp, Integer.MAX_VALUE); dp[0] = 0; for (int i = 0; i <= n; i++) { for (int j = 1; i + j * j <= n; j++) { dp[i + j * j] = Math.min(dp[i + j * j], dp[i] + 1); } } return dp[n]; } public static void main(String[] args) { Solution s = new Solution(); int n = s.numSquares(8); System.out.println(n); }};
LeetCode Perfect Squares
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。