【发布时间】:2017-08-18 19:35:38
【问题描述】:
我正在尝试编写一个程序来解决如下所述的问题 “打印所有可能的不同完美平方,其总和等于给定数字的平方”。 比如——
输入
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]+" ");
}
}
}
请告诉我是否有更好的方法来解决这个问题(时间复杂度更低)
【问题讨论】:
-
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1呢? -
Nopes 需要不同的完美正方形。我已经编辑了问题以使其清楚
-
好的,你知道116有多少种解决方案吗?
-
你需要使用memoization。
-
@AaditMShah memoisation 到底有什么帮助?请注意,总和的所有组成部分都必须是不同的。
标签: algorithm math recursion perfect-square