這裡分類和彙總了欣宸的全部原創(含配套原始碼):https://github.com/zq2599/blog_demos
給你一個整數 n ,返回 和為 n 的完全平方數的最少數量 。
完全平方數 是一個整數,其值等於另一個整數的平方;換句話說,其值等於一個整數自乘的積。例如,1、4、9 和 16 都是完全平方數,而 3 和 11 不是。
輸入:n = 12
輸出:3
解釋:12 = 4 + 4 + 4
輸入:n = 13
輸出:2
解釋:13 = 4 + 9
1 <= n <= 104
class Solution {
public int numSquares(int n) {
// i = i-j*j + j*j - 注意這個j*j,就是完全平方數中的一個
// dp[i]定義:數位i的完全平方數
int[] dp = new int[n+1];
dp[0] = 1;
for (int i=1;i<=n;i++) {
dp[i] = Integer.MAX_VALUE;
for(int j=1;j*j<=i;j++) {
// 如果出現i等於某個數位的平方,那麼i的完全平方數就是1
if (j*j==i) {
dp[i] = 1;
break;
}
// +1的意思就是j*j表示完全平方數中的一個
dp[i] = Math.min(dp[i-j*j]+1, dp[i]);
}
}
return dp[n];
}
}
class Solution {
// 陣列的值就是剛才列印出來的字串,太長了,就不完全貼出來了
private int[] array = new int [] {1,1,2,3,1,2,3,4,2,1...};
public int numSquares(int n) {
return array[n];
}
}