题目一:完全平方数
给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。
示例 1:
输入: n = 12
输出: 3
解释: 12 = 4 + 4 + 4.
示例 2:
输入: n = 13
输出: 2
解释: 13 = 4 + 9.
自己没有较好的思路,只知道要使用动态规划来解决,但是自己没有解决,参考了官方解答
即:n要是符合4^k(8m+7)的形式,则一定要分解为4个数的平方和
Java代码解决:(提交版)
class Solution {
public int numSquares(int n) {
Solution example1 = new Solution();
while(n % 4 == 0){
n = n/4;
}
if(n%8 == 7){
return 4;
}
if(example1.issquare(n)){
return 1;
}
for (int i = 1; i*i <=n ; ++i) {
if(example1.issquare(n - i*i)){
return 2;
}
}
return 3;
}
public boolean issquare(int n){
int k = (int) Math.sqrt(n);
return n == k*k;
}
}
Java代码解决(输出版),第一个输出的数字
public class temp01 {
public static void main(String[] args) {
temp01 example1 = new temp01();
int n = 13;
while(n % 4 == 0){
n = n/4;
}
if(n%8 == 7){
System.out.println(4);;
}
if(example1.issquare(n)){
System.out.println(1);
}
for (int i = 1; i*i <=n ; ++i) {
if(example1.issquare(n - i*i)){
System.out.println(2);
break;
}
}
System.out.println(3);
}
public boolean issquare(int n){
int k = (int) Math.sqrt(n);
return n == k*k;
}
}
未完待续:后续使用动态规划的思维进行处理