问题描述:
将 2019 拆分为若干个两两不同的完全平方数之和,一共有多少种不同的方法?注意交换顺序视为同一种方法,例如 13平方 + 25平方 + 35平方 = 2019 与 132 + 352 +252 = 2019 视为同一种方法。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路
-
在1~根号2019之间搜索数,并进行组合问题,明显使用DFS深搜算法
-
确定深搜区间:1~45(45*45=2025)
-
深搜参数 sum=2019-i*i
-
递归截止条件(sum<0)
代码附上
package com.qustion;
public class 平方拆分 {
static int num=0;
public static void main(String[] args) {
dfs(1,45,2019);
System.out.println(num);
}
public static void dfs(int min ,int max,int sum){
//回溯条件
if(sum==0){
num++;
return;
}else if (sum<0){
return;
}
for (int i=min;i<max;i++){
dfs(i+1,max,sum-i*i);//注意深搜
}
}
}
特别提醒
注意传入dfs的参数是i+1,若深搜的参数不+1,程序一直重复深搜递归,无语了,还以为是语法问题!!!!!