【leetcode279】完全平方数

一、题目

1、题目描述

给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。

2、示例

示例1:

输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.

示例2:

输入: n = 13
输出: 2
解释: 13 = 4 + 9.

二、解题思路

1、思路一

动态规划
动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
而这个题求正整数n,我们可以运用动态规划的思想,从1开始,求出直到n的个数最少的完全平方和。
首先声明一个n+1大小的数组dp,那么dp[i]就代表数字i所需的最少完全平方数个数,dp[i]初值设为i,即最差情况就是i个1相加。
声明变量j,j * j就代表平方数,如果dp[i-j * j]+1的个数比dp[i]小,那么dp[i]就设为dp[i-j * j]+1,这里+1的原因是j * j本身也要算一个数。

执行用时 :30 ms, 在所

你可能感兴趣的:(算法题,leetcode,java,算法)