您的位置:首页 > Web前端

LeetCode Perfect Squares

2015-10-22 09:54 387 查看
Description:

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
.
Solution:

I think this problem has one problem, that it does not tell us the range of n, which may matter how we choose the algorithm.

And for this one, if DP is OK, then it is kind of trivial.

dp[i + square[j] ] = min ( dp[i] + 1, dp[i+square[j]] )

<span style="font-size:18px;">import java.util.Arrays;

public class Solution {
public int numSquares(int n) {
if (n <= 0)
return 0;
int[] dp = new int[n + 1];
Arrays.fill(dp, Integer.MAX_VALUE);

int squares[] = new int
;
int count = 0;
for (int i = 1; i * i <= n; i++) {
dp[i * i] = 1;
squares[count++] = i * i;
}

for (int i = 1; i <= n; i++) {
for (int j = 0; j < count && i + squares[j] <= n; j++)
dp[i + squares[j]] = Math.min(dp[i + squares[j]], dp[i] + 1);
}

System.out.println(n);

return dp
;
}

public static void main(String[] args) {
Solution s = new Solution();
System.out.println(s.numSquares(1));
}
}</span>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: