我正在尝试编写一个程序来解决一个问题,该问题如下所示“打印所有可能的不同完美平方,其总和等于给定数字的平方”。例如 -
输入
11
输出
1 4 16 36 64
1 4 16 100
4 36 81
我尝试了基本的递归方法,并且我的代码通过了少量输入。当我尝试像 116 这样的更大数字时,它会永远运行。我的JAVA代码
public class SumOfPerfectSquare {
public static void main(String args[]){
generateSum(11);
}
private static void generateSum(int num) {
int arr[] = new int[num];
for(int i=1; i<num; i++){
arr[i] = i*i;
}
findSum(arr, num*num, 1, 0, "");
}
private static void findSum(int arr[], int desiredSqr, int pointer, int currentSum, String sumStr) {
if(pointer == arr.length || currentSum >= desiredSqr){
if(currentSum == desiredSqr){
System.out.println(sumStr);
}
return;
}
for(int i=pointer; i<arr.length; i++){
findSum(arr, desiredSqr, i+1, currentSum+arr[i], sumStr+arr[i]+" ");
}
}
}
请让我知道是否有更好的方法来解决这个问题(时间复杂度更低)